Ist es "schlechte Übung", für Zeilenumbrüche in XML-Dokumenten empfindlich zu sein?

8

Ich erstelle einige XML-Dokumente und wenn es um den Adressteil geht, habe ich Fragmente, die wie folgt aussehen:

%Vor%

Die XSLT, die ich für die Konvertierung in XHTML habe, hat eine irreführende rekursive Vorlage, um Zeilenumbrüche in Strings in & lt; br / & gt; Tags.

Das funktioniert alles gut; Aber gilt es als "schlechte Praxis", sich auf Zeilenumbrüche in XML-Dokumenten zu verlassen? Wenn ja, ist es empfehlenswert, dass ich das stattdessen tue?

%Vor%

Sieht so aus, als wäre es wirklich peinlich, jeden Ort zu umbrechen, an dem mein Text mehrere Zeilen mit solchen Tags haben könnte.

    
pauldoo 10.08.2008, 18:20
quelle

12 Antworten

9

Es wird allgemein als schlechte Praxis angesehen, sich auf Zeilenumbrüche zu verlassen, da es eine fragile Art ist, Daten zu unterscheiden. Während die meisten XML-Prozessoren alle Leerzeichen in Ihrem XML beibehalten, ist dies nicht garantiert.

Das eigentliche Problem besteht darin, dass die meisten Anwendungen, die Ihr XML in ein lesbares Format ausgeben, alle Leerzeichen in einem XML-Code als austauschbar betrachten und diese Zeilenumbrüche möglicherweise in ein einziges Leerzeichen reduzieren. Deshalb muss Ihr XSLT durch solche Ringe springen, um die Daten richtig darzustellen. Die Verwendung eines "br" -Tags würde die Transformation erheblich vereinfachen.

Ein weiteres potenzielles Problem besteht darin, dass Sie, wenn Sie Ihr XML-Dokument in einem XML-Editor öffnen und es hübsch ausdrucken, die Zeilenumbrüche verlieren.

Wenn Sie weiterhin Zeilenumbrüche verwenden, stellen Sie sicher, dass Sie der Adresse ein xml: space="preserve" -Attribut hinzufügen. (Sie können dies in Ihrer DTD tun, wenn Sie eine verwenden.)

Einige Vorschläge zum Lesen

  

XML-Anwendungen scheinen oft zu dauern   Kavalier Haltung gegenüber Whitespace   weil die Regeln über die Orte in   ein XML-Dokument, in dem Leerzeichen enthalten sind   ist egal, manchmal geben Sie diese   Anwendungen frei zin hinzufügen oder   Entfernen Sie Leerzeichen an bestimmten Stellen.

James Sulak 10.08.2008, 19:05
quelle
3

Nur wenige Leute haben gesagt, dass CDATA-Blöcke Ihnen erlauben, Zeilenumbrüche zu behalten. Das ist falsch. In CDATA-Abschnitten werden Markups nur als Zeichendaten verarbeitet. Sie ändern nicht die Zeilenumbruchverarbeitung.

%Vor%

ist genau dasselbe wie

%Vor%

Der einzige Unterschied besteht darin, wie verschiedene APIs dies melden.

    
jelovirt 24.08.2008 14:40
quelle
2

Ich denke, das einzige wirkliche Problem ist, dass es das XML schwerer lesbar macht. z.B.

%Vor%

Wenn hübsches XML keine Rolle spielt, würde ich mir wahrscheinlich keine Sorgen machen, solange es funktioniert. Wenn hübsches XML ein Problem ist, würde ich die expliziten Zeilenumbrüche in <br /> -Tags oder \n konvertieren, bevor sie in XML eingebettet werden.

    
Derek Park 10.08.2008 18:29
quelle
2

Was ist mit der Verwendung von Attributen zum Speichern der Daten anstelle von Textknoten?

%Vor%

Ich weiß, dass die Verwendung von Attributen im Vergleich zu Textknoten ein oft diskutiertes Thema ist, aber ich bin in 95% der Fälle mit Attributen beschäftigt und habe deswegen keine Probleme gehabt.

    
Rob Thomas 10.08.2008 21:24
quelle
1

Es hängt davon ab, wie Sie das XML lesen und schreiben.

Wenn XML automatisch generiert wird - wenn Newlines oder explizite \ n Flags in
analysiert werden - dann müssen Sie sich keine Sorgen machen. Ihre Eingabe enthält wahrscheinlich kein anderes XML. Es ist also sauberer, sich nicht mit XML zu befassen.

Wenn Tags manuell bearbeitet werden, ist es noch sauberer, nur einen Zeilenumbruch zu haben, wenn Sie mich fragen.

Die Ausnahme ist, wenn Sie DOM verwenden, um eine Struktur aus dem XML zu erhalten. In diesem Fall sind Zeilenumbrüche offensichtlich böse, weil sie die Hierarchie nicht korrekt repräsentieren. Es klingt, als ob die Hierarchie für Ihre Anwendung irrelevant ist, daher klingen Zeilenumbrüche ausreichend.

Wenn das XML einfach schlecht aussieht (besonders wenn es automatisch generiert wird), kann Tidy helfen, obwohl es besser mit HTML als mit XML funktioniert .

    
Nikhil Chelliah 10.08.2008 18:43
quelle
1

Dies ist wahrscheinlich ein etwas täuschendes Beispiel, da die Adresse in diesem Fall nicht normalisiert ist. Es ist ein vernünftiger Kompromiß, da Adressenfelder jedoch schwer zu normalisieren sind. Wenn Sie die Zeilenumbrüche mit wichtigen Informationen versehen, werden Sie sich nicht normalisieren und das Post-Office die Bedeutung des Zeilenumbruchs interpretieren lassen.

Ich würde sagen, dass das normalerweise kein großes Problem ist, aber in diesem Fall denke ich, dass das Line-Tag am richtigsten ist, da es explizit anzeigt, dass Sie nicht interpretieren, was die Zeilen in verschiedenen Kulturen bedeuten. (Denken Sie daran, dass die meisten Formulare zur Eingabe einer Adresse eine Postleitzahl usw. und eine Adresszeile 1 und 2 enthalten.)

Die Unbequemlichkeit des Zeilen-Tags kommt mit normalem XML, und es wurde viel darüber diskutiert, Horror zu kodieren. Ссылка

    
Hugo 11.08.2008 13:12
quelle
1

Die XML-Spezifikation hat bezüglich Leerzeichen und linefeeds und Carriage Returns insbesondere . Wenn Sie sich also auf echte Zeilenvorschübe (x0A) beschränken, sollten Sie OK sein. Viele Editierwerkzeuge formatieren jedoch XML für "bessere Darstellung" und entfernen möglicherweise die spezielle Syntax. Ein robusterer und sauberer Ansatz als die "& lt; line & gt; & lt; / line & gt;" Idee wäre, einfach Namespaces zu verwenden und XHTML-Inhalt einzubetten, z. B .:

%Vor%

Keine Notwendigkeit, das Rad neu zu erfinden, wenn es um Standardvokabulare geht.

    
Boris Terzic 19.08.2008 21:49
quelle
0

Ich sehe nicht, was mit <Line> -Tags falsch ist.
Offensichtlich ist Ihnen die Visualisierung der Daten wichtig, wichtig genug, um sie in Ihren Daten zu halten (über Zeilenumbrüche in Ihrem ersten Beispiel). Fein. Dann behalte es wirklich, verlasse dich nicht auf "Magie", um es für dich zu behalten. Behalten Sie alle Daten, die Sie später benötigen, und können Sie nicht perfekt aus dem gespeicherten Teil der Daten ableiten, behalten Sie sie auch dann bei, wenn es sich um Visualisierungsdaten handelt (Zeilenumbrüche und andere Formatierungen). Ihr Benutzer (Endbenutzer eines anderen Entwicklers) hat sich die Zeit genommen, diese Daten nach seinen Wünschen zu formatieren - entweder sagen Sie ihm (API-Dokument / Text in der Nähe der Eingabe), dass Sie nicht beabsichtigen, es zu behalten, oder - behalten Sie es einfach. p>     

Ran Biron 10.08.2008 20:41
quelle
-1

Ja, ich denke, die Verwendung eines CDATA Blocks würde das Leerzeichen schützen. In einigen Parser-APIs können Sie Leerzeichen beibehalten.

    
Mark Renouf 10.08.2008 18:26
quelle
-1

Was Sie wirklich tun sollten, ist das Konvertieren Ihres XML in ein Format, das den Leerraum bewahrt.

Anstatt zu versuchen, \ n durch & lt; br / & gt; Sie sollten den gesamten Block in ein & lt; pre & gt;

einschließen

Auf diese Weise wird Ihre Adresse funktional beibehalten (ob Sie Zeilenumbrüche einschließen oder nicht), und das XSTL kann wählen, ob im Ergebnis Leerraum erhalten werden soll.

    
Keith 10.08.2008 19:36
quelle
-1

Ich empfehle, dass Sie entweder die <br/> -Zeilenumbrüche hinzufügen oder vielleicht die Zeilenumbrücheneinheit verwenden - &#x000D;

    
Valters Vingolds 10.08.2008 20:35
quelle
-2

Wenn Sie Ihre Zeilenumbrüche beibehalten möchten, verwenden Sie einen CDATA-Block, wie tweakt sagte

Ansonsten Vorsicht. Meistens werden die Zeilenumbrüche durch XML-Software erhalten, aber manchmal werden sie es nicht, und Sie wollen sich wirklich nicht auf Dinge verlassen, die nur zufällig funktionieren.

    
Orion Edwards 10.08.2008 21:13
quelle