Datum:
Hi Ich hab schon öfter beim Schreiben/Verarbeiten von XML mich über den Konflikt von ordentlicher Formatierung und Inhalt geärgert. wenn man den XML-Code ordentlich hierarchisch schreibt und einrückt hat man ein Problem bei den Text-Nodes, dass die Einrückung und Umbrüche, die eigentlich nur der Übersichtlichkeit dienen die Nutzdaten beeinflussen.
<someXml>
<substructure><- nl a
<someText><- nl b
<- f ->this is some text that should be left aligned.
<- f -><- t ->some more text.<-nl b
</someText>
</substructure>
</someXml>
|
der mit f gekennzeichnete Teil ist eigentlich unerwünscht. gleiches gilt für die mit "<- nl b" gekennzeichneten Zeilenumbrüche der mit t gekennzeichnete Teil ist erwünscht. die Zeilenumbrüche "<- nl a" (und der Whitespace am Anfang neuen Zeile) sind unter Umständen sogar schädlich für die erfolgreiche Validierung eines Dokumentes, da sie einen Textknoten einfügen, der laut Schema eventuell gar nicht erlaubt ist. und so möchte man normalerweise sein xml nicht schreiben:
<someXml><substructure><someText>this is some text that should be left aligned.
some more text.</someText></substructure></someXml>
|
gibts hierfür irgendwelche eleganten Lösungen? (ich benutze meist die libxml) Gruß Vlad
Datum:
ganz einfach: XML nicht in einem Text Editor editieren, sondern in einem (vernünftigen) XML Editor .. bzw. natürlich [CDATA[ verwenden
Datum:
Robert L. schrieb: > ganz einfach: XML nicht in einem Text Editor editieren, sondern in > einem (vernünftigen) XML Editor .. die stärke von XML ist ja gerade, dass es ohne speziellen Editor menschenlesbar und editierbar ist > bzw. natürlich [CDATA[ verwenden kannte ich noch nicht, danke. Das verhindert immerhin, dass man sich um spezielle entitäten kümmern muss. Das Problem mit der zur Einrückung des Elternelements relativen Kindeinrückung löst es natürlich nicht. ebendso das Problem mit den Textknoten aus Whitespaces zwischen zwei tags
Datum:
Vlad Tepesch schrieb: > gibts hierfür irgendwelche eleganten Lösungen? Ordentlichen XML Parser nutzen? Whitespaces (\r \n \t \s) werden (soweit es das Kontentmodel nicht anders vorschreibt) ignoriert, da werden keine "Textknoten" eingefügt, wenn man dies will müssen diese passend Encodiert werden (Enteties, CDATA). Nur wenn der Inhalt ein String ist kann es sein das dies ausgewertet wird, dann hilft dir aber auch keine "elegante" Lösung, da dies dann teil des Inhaltes ist.