2013-11-14 5 views
13

Ich verwende XLST-Dateien, um XML in XML zu transformieren.XML nicht brechenden Raum

Was sind gültige Darstellung von Raum?

<xsl:text> </xsl:text> 
<xsl:text>&nbsp;</xsl:text> 
<xsl:text>&#160;</xsl:text> 
+2

Das erste ist ein normales Leerzeichen, ' ' ist keine gültige Kodierung, und das letztere ist die gültige Kodierung von ' ' – freefaller

Antwort

12

XML hat keine benannten Entitäten neben &lt;, &gt;, &quot;, &apos; und &amp;.

Alle anderen Zeichen können wörtlich dargestellt werden, vorausgesetzt, Sie haben die richtige Codierung in der XML-Deklaration deklariert (z. B. <?xml version="1.0" encoding="..." ?>). Die Deklaration von UTF-8 ist optional, da dies ohnehin die Standardeinstellung ist.

Mit anderen Worten: Es gibt keine Notwendigkeit, speziell auf jedes Zeichen zu entkommen überall es sei denn verlassen unescaped es XML-Syntaxregeln (wie < oder & würde) brechen.

Sie sind natürlich frei, irgendein Zeichen zu entgehen, das Sie wollen.

Diese Darstellungen sind so weit gleichwertig wie das resultierende Dokument betrifft:

<foo>&#x54;&#x65;&#x73;&#x74;&#xa0;&#x54;&#x65;&#x73;&#x74;</foo> 

<foo>&#84;&#101;&#115;&#116;&#160;&#84;&#101;&#115;&#116;</foo> 

<foo>Test&#160;Test</foo> 

<foo>Test Test</foo><!-- given that the " " really is char code 160 --> 

Beachten Sie, dass können erklären benutzerdefinierten benannten Entitäten (wie nbsp) eine DOCTYPE verwenden.

<!DOCTYPE xsl:stylesheet [ 
    <!ENTITY nbsp "&#160;"> 
]> 

Aber angesichts der Tatsache, dass XML alle Zeichen akzeptiert, die so gut wie nie nötig ist. Vor allem nicht, wenn Sie das Dokument mit einem geeigneten Werkzeug wie einer DOM-API erstellen.

+0

Sind die letzten beiden gleichwertig? Ein Raum ist nicht derselbe wie ein Nicht-Brech-Raum ... zumindest verstehe ich das so – freefaller

+2

Das ist ein Fehler in der Normalisierung von SO. Ich habe definitiv ein NBSP-Zeichen verwendet, aber es wird still durch ein gewöhnliches Leerzeichen ersetzt. Es scheint unmöglich zu sein, einen tatsächlichen NBSP in einer Antwort zu speichern. – Tomalak

4

Fügen Sie alle Entitäten, die Parse-Fehler verursachen, dem DOCTYPE Ihres * .xls-Stylesheets hinzu.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE xsl:stylesheet [ 
    <!ENTITY nbsp "&#160;"> 
]> 
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

Jetzt können Sie &nbsp; wie gewohnt verwenden.

Verwandte Themen