问题描述
您的直接问题是,虽然 unicode 160 (hex 0xA0)是 HTML 实体,但它不是 XML 实体。
使用or
代替非破坏空间。
但是对于您更大的问题,如何处理 XSL 中的空白,答案很简单:使用<xsl:text>
.
每次包含任何纯文本时,将其括在<xsl:text> the text goes here </xsl:text>
标签中。如果你不这样做,下次聪明的文本编辑器重新格式化你的文档时,你将陷入痛苦的世界。
您至少已经进入了一个大陆,或者如果幸运的话,您可能已经进入了一个痛苦的国家,因为期望 XML/XSL 可以节省空白。即使是理解 XSL 到第 n 级的天才,仍然会因空白处理而受到县级或至少自治市级的痛苦。(自治市镇级别的痛苦被编码在 XML 规范“2.11 End-of-Line Handling”中,因为其疯狂的设计决定拒绝区分 LF 和 CRLF - 所以没有人可以避免这种情况)。
只是为了让您知道会发生什么:这并不容易 - 您可以在没有<xsl:text>
标签的情况下逃脱很长时间,但是如果您只是接受它并从一开始就将它们放入,那么在长跑。
错误示例:
<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>
右例:
<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>
问题是,它们。
但是其中一个会是尚未出生的人**,另一个不会。
简短的解释是这样的:默认情况下会忽略仅包含空白的节点(除非您调整选项)。所以这是任何仅由CR
,LF
和TAB
和SPACE
之间>
的内容<
。由具有前导和尾随空格的非空白文本组成的节点可能具有“折叠”的空白 - 即 effed。
因此,示例 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"/>
只有其中一个是您想要的……但根据有效的选项
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)