2013-11-14 57 views
13

我正在使用XLST文件將XML轉換爲XML。XML非破壞空間

什麼是有效的空間表示?

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

第一個是正常空間,' '不是有效編碼,而後者是' ' – freefaller

回答

12

XML沒有任何命名實體之外&lt;&gt;&quot;&apos;&amp;

考慮到您在XML聲明中聲明瞭正確的編碼(例如<?xml version="1.0" encoding="..." ?>),所有其他字符都可以逐字表示。聲明UTF-8是可選的,因爲這是默認的。

換句話說:有沒有必要專門逃脫任何字符的任何地方除非離開它未轉義會破壞XML語法規則(如<&會)。

你當然可以逃脫任何你想要的角色。

,這些表述是等價的,只要所得到的文檔而言:

<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 --> 

請注意,您可以使用一個DOCTYPE聲明自定義命名實體(如nbsp)。

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

但是鑑於XML接受任何幾乎不需要的字符的事實。特別是當您使用適當的工具(如DOM API)創建文檔時。

+0

的有效編碼是最後兩個等效嗎?一個空間和一個非破壞空間是不一樣的......至少我如何理解它 – freefaller

+2

這是SO正常化的一個小故障。我明確地使用了NBSP字符,但是它默默地被一個普通空間取代。在回答中似乎不可能存儲實際的NBSP。 – Tomalak

4

由於涉及到該問題,請將導致解析錯誤的所有實體添加到* .xls樣式表的DOCTYPE中。

<?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"> 

現在您可以像平常一樣使用&nbsp;了。