您的直接問題是,雖然unicode 160(十六進制0xA0)
是一個HTML實體,但它不是一個XML實體。
使用 
或 
代替非空白區域。
但是對於你的大問題,如何處理XSL中的空白,答案很簡單:使用<xsl:text>
。
每次包含任何純文本時,請將其包含在<xsl:text> the text goes here </xsl:text>
標記中。如果你不這樣做,下一次巧妙的文本編輯器會重新格式化文檔時,你將面臨一個痛苦的世界。
對於希望XML/XSL節省空白的情況,您至少已經進入了一個大洲,或者可能是幸運的國家。即使是將XSL理解爲第n級的天才,仍然會因爲空白處理而獲得縣級或至少自治區級別的痛苦。 (自治區級別的痛苦是在XML規範中編碼的,「2.11行尾處理」由其瘋狂的設計決定拒絕區分LF和CRLF - 所以沒有人能夠避免)。
這樣你就知道該期待什麼了:這並不容易 - 你可以在沒有<xsl:text>
標籤的情況下離開很長時間,但如果你只是接受它,並從一開始就把它放進去,從長遠來看會更容易。
例WRONG:
<xsl:element name="MyElem">
<xsl:attribute name="fullPath">c:\base\Path\here\<xsl:value-of select="../parent/@relPath"/>\<xsl:value-of select="@fileName">
</xsl:attribute>
</xsl:element>
例RIGHT:
<xsl:element name="MyElem">
<xsl:attribute name="fullPath">
<xsl:text>c:\base\Path\here\</xsl:text>
<xsl:value-of select="../parent/@relPath"/>
<xsl:text>\</xsl:text>
<xsl:value-of select="@fileName">
</xsl:attribute>
</xsl:element>
事情是,它們都產生相同的輸出。
但他們中的一個將在未來在某些時候搞砸了,是的,可能有人爲尚未出生,其他的不會。
簡短的解釋是這樣的:默認情況下,只包含WHITESPACE的節點被忽略(除非你調整了選項)。這就是任何只由CR
,LF
,TAB
和SPACE
組成的>
和<
之間的任何東西。由非空白文本組成的節點,帶有前導和尾隨空白,可能有「摺疊」的空白 - 即。結束了。
所以實施例RIGHT和這之間的差:
<xsl:element name="MyElem">
<xsl:attribute name="fullPath">
c:\base\Path\here\
<xsl:value-of select="../parent/@relPath"/>
\
<xsl:value-of select="@fileName">
</xsl:attribute>
</xsl:element>
是一個產生<MyElem fullPath="c:\base\Path\here\relative\path\filename.txt"/>
和其他,這取決於力的DOM選項,產生下列操作之一:
<MyElem fullPath="c:\base\Path\here\relative\path\filename.txt"/>
<MyElem fullPath="c:\base\Path\here\ relative\path \ filename.txt"/>
<MyElem fullPath="c:\base\Path\here\ relative\path \&10;filename.txt"/>
<MyElem fullPath="c:\base\Path\here\	 relative\path	 \	&10;	filename.txt"/>
其中只有一個是你想要的... 但其中的任何一個可能是正確的取決於有效的選項...
來源
2013-04-03 22:05:06
Ben
的可能duplcate:http://stackoverflow.com/questions/31870/using-a-html-entity-in-xslt-eg-nbsp – Clint 2013-04-03 22:03:31