21

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

什么是空间的有效表示?

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

2 回答 2

21

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

所有其他字符都可以逐字表示,前提是您在 XML 声明中声明了正确的编码(例如<?xml version="1.0" encoding="..." ?>),并且实际上以该编码保存了 XML 文件。声明 UTF-8 是可选的,因为这是 XML 的默认设置。

“正确”编码是包含您要使用的所有字符的任何编码。选择 Unicode 既流行又实用,但 XML 并不在意,只要您正确声明它即可。

所选字符集支持的任何字符都可以按原样使用,但在 XML 中具有特殊含义的字符除外(必须始终转义的 , 或 , 和<, >or &,仅在某些情况下必须转义) . 所有其他字符可以转义,但您不需要。'"

需要说明的是,这些表示在生成的文档方面是 100% 等价的(即在 XML 解析器读取文件后得到的对象):

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

<foo>Test&#160;Test</foo>     <!-- partially escaped -->

<foo>&#84;&#101;&#115;&#116;&#160;&#84;&#101;&#115;&#116;</foo>   <!-- decimal escaped -->

<foo>&#x54;&#x65;&#x73;&#x74;&#xa0;&#x54;&#x65;&#x73;&#x74;</foo> <!-- hex escaped -->

不间断空格与字母“T”没有任何特殊或不同。为方便使用文本编辑器编辑 XML 文件,您可能希望选择转义形式,但没有技术要求。


请注意,您可以&nbsp;使用 DOCTYPE声明自定义命名实体(如)。

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

但是考虑到 XML 接受几乎不需要的任何字符这一事实。尤其是当您使用适当的工具(如 DOM API)创建文档时。

于 2013-11-14T10:28:52.527 回答
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;照常使用了。

于 2016-01-18T15:12:26.650 回答