什么会导致<span></span><span></span><span></span>
转换为<span><span><span></span></span></span>
,但不转换<span>a</span><span>a</span><span>a</span>
?
问问题
81 次
1 回答
1
使用:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()[1]|@*"/>
</xsl:copy>
<xsl:apply-templates select="following-sibling::node()[1]"/>
</xsl:template>
<xsl:template match="span[not(node())]">
<span>
<xsl:apply-templates select="following-sibling::*[1][self::span[not(node())]]"/>
</span>
</xsl:template>
</xsl:stylesheet>
当此转换应用于以下文档时(提供的片段,包装到单个顶部元素中 - 将成为格式良好的 XML 文档):
<p>
<span></span><span></span><span></span>
</p
产生了想要的正确结果:
<p>
<span>
<span>
<span/>
</span>
</span>
</p>
此外,根据需要,如果我们对这个 XML 文档应用相同的转换(如上):
<p>
<span>a</span><span>a</span><span>a</span>
<span></span><span></span><span></span>
</p>
结果保留“原样”span
具有子节点的元素:
<p>
<span>a</span>
<span>a</span>
<span>a</span>
<span>
<span>
<span/>
</span>
</span>
</p>
说明:
我们使用“细粒度”身份规则,它“按原样”复制每个节点,并且一步只复制一个节点。
span
有一个模板可以覆盖任何没有子节点的元素的细粒度标识模板。它重新创建元素并处理也是空span
元素的第一个兄弟。
于 2012-11-09T03:49:33.413 回答