Sind Zeilenumbrüche in XML-Attributwerten zulässig?

91

Mir ist klar, dass es nicht elegant oder erwünscht ist, aber darf ein Attributwert in einem XML-Element (in wohlgeformtem XML) mehrere Zeilen umfassen?

z.B

<some-xml-element value="this value goes over....
multiple lines!" />

Ja, mir ist klar, dass es bessere Möglichkeiten gibt, das zu schreiben. Ich würde es persönlich schreiben wie:

<some-xml-element>
<value>this value goes over...
multiple lines!</value>
</some-xml-element>

oder:

<some-xml-element value="this value goes over....&#13;&#10;" />

Aber wir haben unseren eigenen XML-Parser und ich würde gerne wissen, ob das erste Beispiel in wohlgeformtem XML zulässig ist.

CodeAndCats
quelle
1
Der .NET XDocument-Parser akzeptiert dies wie erwartet, aber der Attributwert wird mit einem Leerzeichen und nicht mit einem Zeilenvorschub zurückgegeben, wie dies in einem Text <Wert> als zweites Beispiel der Fall wäre. (Ihre Frage ist nicht spezifisch für .NET, aber meine Beispieldaten sind. Ich weiß nicht, ob dies Teil des allgemeinen Standards oder einer .NET-Funktion ist.)
Mark Hurd
1
Siehe auch stackoverflow.com/q/2004386/55452
David J. Liszewski
machte ein Beispiel zu einer ähnlichen Frage, die Zeilenumbrüche bewahrt: stackoverflow.com/a/29782321/611007
n611x007

Antworten:

101

http://www.w3.org/TR/REC-xml/#NT-AttValue

Es scheint , außer alles zu sagen <, &und Ihr Trennzeichen ( 'oder ") ist in Ordnung. So sollte auch Newline sein.

derobert
quelle
6
Ein Beispiel, wenn neue Zeilen innerhalb eines Attributs eine gute Idee sind, ist das Attribut xsi: schemaLocation in der Spring-Konfiguration, das mehrere durch Leerzeichen getrennte URLs enthalten kann und daher viel länger als die Bildschirmbreite ist.
Stivlo
3
Es ist gültig, aber der Parser normalisiert sie auf Leerzeichen, wie Jan Cetkovsky sagt .
n611x007
Nun ... Ich verwende mehrere Zeilen für lange if / when-Testanweisungen in XSLT-Dokumenten.
Nullius
51

Es ist jedoch zulässig, dass Ihr XML-Parser gemäß der W3C-Empfehlung alle Leerzeichen auf Leerzeichen (0x20) normalisiert. Daher unterscheidet sich die Ausgabe Ihrer Beispiele (Sie sollten eine neue Zeile in der Ausgabe für "& # 13; & # 10" haben ; ", aber im ersten Fall nur Leerzeichen).

http://www.w3.org/TR/1998/REC-xml-19980210#AVNormalize

Jan Cetkovsky
quelle
3

Nur .NET: Wenn Sie nicht sicher sind, ob die Zielzeichenfolge ein gültiges XML-Attribut ist (und den Wert dieses Attributs über Code angeben), können Sie jederzeit die Funktion SecurityElement.Escape verwenden, um ungültige Zeichen zu umgehen.

Gemäß der Beschreibung dieser Funktion sind die einzigen ungültigen Zeichen:

<, >, &, ',"

Und das bedeutet (wie meine Vorgänger geschrieben haben), dass die neue Zeile in Ordnung sein sollte.

Łukasz Wiatrak
quelle
2

Ja, das erste Beispiel ist gültig.

Reji
quelle