![]() |
XML Node.Text liefert keinen Wert
Ich dachte ich wollte es mal "richtig" machen und das XML-Binding von Delphi verwenden.
Nun hab ich das Problem nach dem Einlesen einer XML-Datei, das ich auf die Inhalte von Knoten nicht über ihren Namen zugreifen kann, also die Inhalte sind leer. Ich fang mal einfach an:
Code:
So hätte ich es gern, allerdings ist Text leer (so arbeitet auch das Binding)
ShowMessage(xml.ChildNodes['HeaderExchangedDocument'].ChildNodes['ID'].Text);
wenn ich mit einer Schleife über die Kinder von HeaderExchangedDocument gehe klappt es
Code:
mach ich was falsch?
for l := 0 to xml.ChildNodes['HeaderExchangedDocument'].ChildNodes.Count-1 do
if xml.ChildNodes['HeaderExchangedDocument'].ChildNodes[l].IsTextElement then begin ShowMessage(xml.ChildNodes['HeaderExchangedDocument'].ChildNodes[l].Text); ShowMessage(xml.ChildNodes['HeaderExchangedDocument'].ChildNodes[l].NodeName); end; hier mal der Anfang der XML-Datei
Code:
<?xml version="1.0" encoding="UTF-8"?>
<rsm:CrossIndustryDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rsm="urn:ferd:CrossIndustryDocument:invoice:1p0" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:12" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:15"> <rsm:HeaderExchangedDocument> <ram:ID>RK21012345</ram:ID> .... |
AW: XML Node.Text liefert keinen Wert
ok, scheint am Namespace zu liegen, nur wie geht es richtig?
|
AW: XML Node.Text liefert keinen Wert
Hallo Sven,
ich sitze gerade am selben Thema mit ZUGFeRD. Ich wollte allerdings erstmal die ZUGfERD-Invoice.xml für Rechnungsausgänge erstellen. Das eingelese Schema über XML-Datenanbindung variiert etwas von dem, was die Beispieldateien hergeben. So sind in den Beispieldateien immer die Prefixe xmlns, rsm, ram, udt,... mit drin. Erzeugt man eine Datei mit der Schemaanbindung bekomme ich die nicht. Weiß auch nicht, was man wie einstellen muss, damit die auch geschrieben werden. Das wäre meine Frage, und natürlich, ob das zwingend notwendig ist, um eine gültige Datei zu bekommen. Vielleicht ist meine Frage gleichzeitig Deine Antwort, Du hast 'ID' abgefragt, vielleicht musst Du das Prefix mitnehmen und "ram:ID" abfragen, damit Du das Node bekommst. |
AW: XML Node.Text liefert keinen Wert
Es gibt auch noch
xml.ChildNodes.FindNode(<name>, <namespace>) Genau dein Problem hatte ich nämlich erst letzte Woche :mrgreen: |
AW: XML Node.Text liefert keinen Wert
schon klar mit dem Parameter bei FindNode. Nur so funktioniert xml.ChildNodes['HeaderExchangedDocument'].ChildNodes['ID'].Text nicht.
Ich werfe das komplette Bindung weg und mache nun alles selbst. Dauert etwas Das ganze ist dann übrigens unter ![]() zu finden. Ich werde die Quellen immer aktuallisieren. |
AW: XML Node.Text liefert keinen Wert
Zitat:
Delphi-Quellcode:
xml.ChildNodes.FindNode('HeaderExchangedDocument', 'rsm').ChildNodes.FindNode('ID', 'ram').Text
müsste doch ohne Probleme gehen oder nicht? |
AW: XML Node.Text liefert keinen Wert
Hi,
ich muss noch mal auf die Sache mit den Prefixen zurückkommen. Ich hab mich die letzten Wochen mit etwas anderem beschäftigt und wollte nun weitermachen mit ZUGFerd. Wenn man die XML-Shemata von ZUGFerd einliest in Delphi bekomme ich zwar die entsprechenden Interface-Deklarationen und kann hier auch alles nutzen. Beim Schreiben der XML-Datei bekomme ich aber diese ganzen Prefixe/Namespaces "ram:" oder "udt:" usw. nicht mit abgespeichert. So wie ich das verstanden habe, werden die aber benötigt, um eine valide Datei zu erzeugen. Mein Kollege meinte, das wäre ein Fehler von Delphi, da das Schemata aus drei Dateien besteht und Delphi es nicht hinbekommt, das so zu mixen, dass alle Typen und Namespaces mit in die erstellte Unit einfliessen. Was meint Ihr? Hat das jemand hinbekommen oder haben das alle dann doch zu Fuß gemacht? |
AW: XML Node.Text liefert keinen Wert
ich baue die XML jetzt von Hand. Selbst wenn die Schemata in einer Datei liegen würden, wäre es nicht möglich. Siehe auch obiges Git-Repo
|
AW: XML Node.Text liefert keinen Wert
Ich habe die ZugFerd Implementation auch "per Hand" gemacht...
Ciao Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz