Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   XML Node.Text liefert keinen Wert (https://www.delphipraxis.net/196141-xml-node-text-liefert-keinen-wert.html)

sh17 26. Apr 2018 10:04

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:
ShowMessage(xml.ChildNodes['HeaderExchangedDocument'].ChildNodes['ID'].Text);
So hätte ich es gern, allerdings ist Text leer (so arbeitet auch das Binding)

wenn ich mit einer Schleife über die Kinder von HeaderExchangedDocument gehe
klappt es

Code:
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;
mach ich was falsch?

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>
      ....

sh17 26. Apr 2018 10:29

AW: XML Node.Text liefert keinen Wert
 
ok, scheint am Namespace zu liegen, nur wie geht es richtig?

michaelg 2. Mai 2018 13:27

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.

Neutral General 2. Mai 2018 13:39

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:

sh17 2. Mai 2018 18:09

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

https://github.com/LandrixSoftware/ZUGFeRD-for-Delphi

zu finden. Ich werde die Quellen immer aktuallisieren.

Neutral General 2. Mai 2018 19:04

AW: XML Node.Text liefert keinen Wert
 
Zitat:

Zitat von sh17 (Beitrag 1401114)
schon klar mit dem Parameter bei FindNode. Nur so funktioniert xml.ChildNodes['HeaderExchangedDocument'].ChildNodes['ID'].Text nicht.

Hä wieso das nicht?
Delphi-Quellcode:
xml.ChildNodes.FindNode('HeaderExchangedDocument', 'rsm').ChildNodes.FindNode('ID', 'ram').Text

müsste doch ohne Probleme gehen oder nicht?

michaelg 7. Jun 2018 12:30

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?

sh17 7. Jun 2018 13:24

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

sko1 11. Jun 2018 10:10

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 14:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf