Forum: PC-Programmierung [xml] Normalisierung von Einrückungen in Text-Abschnitten


von Vlad T. (vlad_tepesch)


Lesenswert?

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.
1
<someXml>
2
  <substructure><- nl a
3
    <someText><- nl b
4
<- f ->this is some text that should be left aligned.
5
<- f -><-    t     ->some more text.<-nl b
6
    </someText>
7
  </substructure>
8
</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:
1
<someXml><substructure><someText>this is some text that should be left aligned.
2
              some more text.</someText></substructure></someXml>

gibts hierfür irgendwelche eleganten Lösungen?
(ich benutze meist die libxml)


Gruß
Vlad

von Robert L. (lrlr)


Lesenswert?

ganz einfach: XML  nicht in einem Text Editor editieren, sondern in 
einem (vernünftigen) XML Editor ..

bzw. natürlich [CDATA[ verwenden

von Vlad T. (vlad_tepesch)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.