![]() |
XRechnung: XML und CDATA
Hallo zusammen,
ich arbeite gerade an der Implementierung der XRechnung. Dazu benutze ich das TXMLDocument. Für ein bestimmtes Element ist gefordert, dass Zeilenümbrüche im XML erhalten bleiben müssen. Also nehme ich einen CDATA-Knoten. Vom Prinzip her so:
Delphi-Quellcode:
Das funktioniert soweit ganz gut. Das XML sieht danach so aus:
Inhalt:='#SKONTO#TAGE=14#PROZENT=2.50#BASISBETRAG=11000.00#' + sLineBreak +
'#SKONTO#TAGE=28#PROZENT=1.00#' + sLineBreak; Node1:=RootNode.AddChild('cac:PaymentTerms'); Node2:=Node1.AddChild('cbc:Note'); Node3:=XMLDoc.CreateNode(Inhalt, ntCData); Node2.ChildNodes.Add(Node3)
Code:
Jetzt gibt es aber im Netz mindestens 2 Online-XRechnungs-Viewer, die sich an diesem Knoten stören und anmeckern, dass hier keine zusätzlichen Leerzeichen etc. vorhanden sein dürfen. Diese Syntax wird akzeptiert:
<cac:PaymentTerms>
<cbc:Note> <![CDATA[#SKONTO#TAGE=14#PROZENT=2.50#BASISBETRAG=11000.00# #SKONTO#TAGE=28#PROZENT=1.00# ]]> </cbc:Note> </cac:PaymentTerms>
Code:
<cac:PaymentTerms>
<cbc:Note><![CDATA[#SKONTO#TAGE=14#PROZENT=2.50#BASISBETRAG=11000.00# #SKONTO#TAGE=28#PROZENT=1.00# ]]></cbc:Note> </cac:PaymentTerms> Deshalb meine Frage: Wie bringe ich dem TXMLDocument bei, dass es das <![CDATA...]> direkt zwischen die Tags <cbc:Note></cbc:Note> schreibt, ohne weitere Zeilenumbrücke oder Leerzeichen? |
AW: XRechnung: XML und CDATA
Ich behelfe mir jetzt mit diesem Workaraound:
Das TXMLDocument hat ja die Eigenschaft XML, über die man als TStrings auf die einzelnen Zeilen des XML zugreifen kann. Darin mache ich jetzt die erforderlichen Umformatierungen und speichere es mit XMLDocument.XML.SaveToFile ab. Ist nicht besonders elegant, aber es funktioniert. Oder hat jemand eine bessere Lösung? |
AW: XRechnung: XML und CDATA
Schau mal ob dir das hier weiter hilft:
![]() Dort wird das CData anders angelegt (als Element und nicht als Knoten). |
AW: XRechnung: XML und CDATA
Wo kommt den da das
Delphi-Quellcode:
her? In meinem TXMLDocument gibts das nicht.
xmldoc.createCDATASection
|
AW: XRechnung: XML und CDATA
Zitat:
Delphi-Quellcode:
Oder verstehe ich hier was nicht? Und wenn ja, was genau?
Inhalt:='#SKONTO#TAGE=14#PROZENT=2.50#BASISBETRAG=11000.00#' +
'#SKONTO#TAGE=28#PROZENT=1.00#'; |
AW: XRechnung: XML und CDATA
Zitat:
Zitat:
Code:
Da bräuchte man kein CDATA. Aber das ist doch nach meinem Verständnis kein XML-konformer Zeilenumbruch zwischen den beiden #SKONTO-Zeilen. Vielleicht sind meine getesteten Viewer da einfach nur zu fehlertolerant. Ich denke, ich bleibe bei der CDATA-Lösung.
<cac:PaymentTerms>
<cbc:Note>#SKONTO#TAGE=14#PROZENT=2.50#BASISBETRAG=11000.00# #SKONTO#TAGE=28#PROZENT=1.00# </cbc:Note> </cac:PaymentTerms> |
AW: XRechnung: XML und CDATA
Hallo,
entweder 
 oder <br> (Wobei das auch Html sein könnte) hier gefunden: ![]() |
AW: XRechnung: XML und CDATA
Die Viewer sind teilweise sehr tolerant. Ich teste das erst mit dem Java Validator und dann mit dem Ultramarin Viewer.
Der Validator scheint ziemlich pingelig zu sein. Mit dem Skonto funktioniert das bei mir so: function skonto:string; begin //#SKONTO#TAGE=14#PROZENT=2.25# mehrere Zeilen result := '#SKONTO#TAGE='+VPrintForm.QVORGANG.FieldByName('Z AHLB1TAGE').AsString+'#PROZENT='+floatp2str(VPrint Form.QVORGANG.FieldByName('ZAHLB1SKONTO').AsFloat) +'#'+#13+#10+ '#SKONTO#TAGE='+VPrintForm.QVORGANG.FieldByName('Z AHLB2TAGE').AsString+'#PROZENT='+floatp2str(VPrint Form.QVORGANG.FieldByName('ZAHLB2SKONTO').AsFloat) +'#'+#13+#10+ '#SKONTO#TAGE='+VPrintForm.QVORGANG.FieldByName('Z AHLB2TAGE').AsString+'#PROZENT='+floatp2str(VPrint Form.QVORGANG.FieldByName('ZAHLB3SKONTO').AsFloat) +'#'; end; ... Anode1:= FRootNode.AddChild('cac:PaymentTerms'); ANode1.AddChild('cbc:Note').Text:=skonto; |
AW: XRechnung: XML und CDATA
Aha, also auch ohne CDATA. Dann scheint das ja tatsächlich zu funktionieren.
Der Java Validator meckert auch nicht. |
AW: XRechnung: XML und CDATA
da fragt man sich, warum die für Skonto so ein halbes CSV-Format definieren, anstatt das auch in XML abzubilden
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:25 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