XML不间断的空间

时间:2013-11-14 10:12:55

标签: xml xslt

我正在使用XSLT文件将XML转换为XML。

什么是空间的有效表示?

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

2 个答案:

答案 0 :(得分:17)

除了&lt;&gt;&quot;&apos;&amp;之外,XML没有任何命名实体。

除非您在XML声明中声明了正确的编码(例如<?xml version="1.0" encoding="..." ?>),否则所有其他字符都可以逐字表示。声明UTF-8是可选的,因为这是默认值。

换句话说:没有必要在的任何地方专门转义任何字符,除非将其转义为非转义会破坏XML语法规则(如<&)。< / p>

你当然可以自由地逃避任何你想要的角色。

就结果文件而言,这些表示是等效的:

<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)创建文档时。

答案 1 :(得分:5)

与问题相关,将导致解析错误的所有实体添加到* .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;