在XSLT中包含html實體的最佳方式是什麼?在XSLT中使用HTML實體(例如 )
<xsl:template match="https://stackoverflow.com/a/node">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
這個方法返回一個XsltParseError
在XSLT中包含html實體的最佳方式是什麼?在XSLT中使用HTML實體(例如 )
<xsl:template match="https://stackoverflow.com/a/node">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
這個方法返回一個XsltParseError
您可以使用CDATA節
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
,或者你可以在本地DTD描述& NBSP:
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
或只使用 
i的
nstead這一個返回XsltParseError
是的,之所以說是
是不是在XML或XSLT預定義的實體,因爲它是在HTML中。
你可以只使用其中
代表的Unicode字符: 
另外一個可能性,XSLT中使用HTML實體從如下之一:
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
XSLT只處理五個基本實體默認情況下:lt
,gt
,apos
,quot
和amp
。其他所有需要定義爲@Aku提及。
既然有Unicode,那麼使用命名字符實體通常會適得其反。我建議使用Unicode字符作爲非破壞性空間而不是實體,只是出於這個原因。或者,您可以使用實體 
;而不是命名實體。使用命名實體使您的XML依賴於內聯或外部DTD。文本標記之間
一個空格字符就足夠了。
也可以擴大從aku's answer第二部分的方法,並得到所有的已知字符引用可用的,就像這樣:
<!DOCTYPE stylesheet [
<!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
"http://www.w3.org/2003/entities/2007/w3centities-f.ent">
%w3centities-f;
]>
...
<xsl:text> −30°</xsl:text>
有一個在結果一定差異相比,<xsl:text disable-output-escaping="yes">
方法。後者將爲各種輸出產生類似
的字符串文字,即使對於<xsl:output method="text">
,這也可能與您所希望的不同......相反,通過<!DOCTYPE ... <!ENTITY ...
獲取爲XSLT模板定義的實體將始終產生與您的xsl:output
設置一致的輸出。
然後,使用本地實體解析器來阻止XSLT引擎從Internet獲取字符實體定義可能是明智的。 JAXP或顯式Xalan-J用戶可能需要Xalan-J的補丁才能正確使用解析器。請參閱我的博客XSLT, entities, Java, Xalan...以獲取補丁下載和評論。
謝謝您的信息。我寫了一篇基於對我有用的簡短博客文章,因爲我在Dynamicweb CMS的模板中進行了XSLT轉換。
博客帖子在這裏:How to add entities to XSLT templates。
/斯登Hougaard
我發現所有這些解決方案所產生的空白空間中的一個字符。
使用<xsl:text> </xsl:text>
解決了我的問題;但<xsl:text>#x20;</xsl:text>
也可能工作。
有必要使用實體#x160;
我沒有運氣從阿庫的DOCTYPE方法。
什麼MSXML爲我工作的一個轉換的Windows 2003服務器上,是
<xsl:text disable-output-escaping="yes">&#160;</xsl:text>
排序以上的雜交體。感謝Stackoverflow貢獻者!
Unicode字符&#160給出問號和框,輸出未轉義的html實體爲我工作,謝謝。 – AUSteve 2011-08-16 02:23:35