我需要确定遇到指定子元素时将其拆分的方法。输入示例:
<root>
...
<span>Here's that <link>link</link> for you.</span>
...
</root>
所需的输出:
<root>
...
<span>Here's that </span><link>link</link><span> for you.</span>
...
</root>
我知道我可以使用标记化在给定的文本周围拆分字符串,但是我需要在给定的元素周围拆分元素,但我不确定解决此问题的最佳方法。
请注意,我正在使用高度受限的DTD,所以我们可能会看到的最复杂的嵌套情况如下所示:
示例输入:
<root>
...
<span>Here's that <link>link</link> and this <link>link</link>and this <link>link</link>for you.</span>
...
</root>
所需的输出:
<root>
...
<span>Here's that </span><link>link</link><span> and this </span><link>link</link><span> and this </span><link>link</link><span> for you.</span>
...
</root>
答案 0 :(得分:2)
在XSLT 2或3中,这似乎是一个分组问题,解决了(假设您只想将该解决方案应用于至少有一个span
子元素的link
元素):
<xsl:template match="span[link]">
<xsl:for-each-group select="node()" group-adjacent="boolean(self::link)">
<xsl:choose>
<xsl:when test="current-grouping-key()">
<xsl:apply-templates select="current-group()"/>
</xsl:when>
<xsl:otherwise>
<span>
<xsl:apply-templates select="current-group()"/>
</span>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>
当然还要加上身份转换模板来复制/处理其余的内容。 https://xsltfiddle.liberty-development.net/6qVRKwK/1,XSLT 2 http://xsltransform.hikmatu.com/gWmuiHN的XSLT 3在线示例。