在IE(也许是FF,但不确定)我的XSL样式表中的以下片段...
<td>
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="image" />
</xsl:attribute>
</xsl:element>
</td>
Run Code Online (Sandbox Code Playgroud)
生成以下XHTML代码......
<td><img src="
someimage.jpg"></td>
Run Code Online (Sandbox Code Playgroud)
src="在以后使用DOM解析它时会导致问题的新行.有任何想法吗?
非常感谢您的帮助!
在其中一条评论中(对于现在删除的答案),您说您的输入如下所示:
<image>
someimage.jpg</image>
Run Code Online (Sandbox Code Playgroud)
这是你的换行符的来源 - 它是节点值的一部分,因此由XSL处理器保留(它不是"添加",如你所怀疑的那样).
要删除空间,必须在输出之前修改节点值,在这种情况下最适合的是normalize-space()函数,因为URL通常不包含空格.
<td>
<img src="{normalize-space(image)}"/>
</td>
Run Code Online (Sandbox Code Playgroud)
如果您有机会,应该在生成输入XML的过程中修复此问题,因为XML本身已经错误.如果换行不是数据的一部分,那么它不应该在那里.
与此处提出的许多其他人相反,您的XSLT代码布局对输出没有影响.在处理开始之前,所有空格都会从XSL样式表中删除,因此:
<td>
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="image" />
</xsl:attribute>
</xsl:element>
</td>
Run Code Online (Sandbox Code Playgroud)
虽然不必要地冗长,但相当于:
<td>
<xsl:element name="img"><xsl:attribute name="src"><xsl:value-of select="image" /></xsl:attribute>
</xsl:element>
</td>
Run Code Online (Sandbox Code Playgroud)
就输出空白而言,相当于此:
<td><img src="{image}"/></td>
Run Code Online (Sandbox Code Playgroud)
但是,如果您的XSL代码中存在杂散文本节点,则会保留它们周围的所有空格.这意味着你不应该这样做:
<td>
Stray Text
</td>
Run Code Online (Sandbox Code Playgroud)
因为这会"\n Stray Text\n "在输出中生成一个文本节点.更好的是:
<td>
<xsl:text>Contained Text</xsl:text>
</td>
Run Code Online (Sandbox Code Playgroud)
关于:"但为什么不起作用<xsl:strip-space>?" 我建议阅读Pavel Minaev对这个问题的回答.
| 归档时间: |
|
| 查看次数: |
2318 次 |
| 最近记录: |