我试图以下列方式在XSL文档中创建自动间距。
<td><xsl:value-of select="Name/First"/> <xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text><xsl:value-of select="Name/Last"/> </td>
但是,呈现的HTML具有以下形式
<td>John&nbsp;Grisham</td>
关于如何解决这个问题的任何想法?
答案 0 :(得分:2)
你当前的问题是,虽然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>
标签的情况下离开很长一段时间,但如果你只是接受它,并把它们放进去 - 从长远来看,这将更容易。
示例错误:
<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>
问题是,他们 都产生完全相同的输出 。
但是其中一个人 将来某些时候搞砸了 ,是的,可能 还有一个尚未出生的人 ,另一个不会。
简短的解释是这样的:默认情况下忽略仅由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"/>
而另一个生成<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"/>
,另一个生成,取决于有效的DOM选项,生成其中一个:
{{1}}
其中只有一个是你想要的...... 但其中任何一个都可能是正确的 ,具体取决于有效的选项......
答案 1 :(得分:-1)
使用此<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
并且它有效!