我有以下HTML片段:
<p>
This is
<font>start</font>
just some <i>happy</i> text
<font>stop</font>
that might continue here.
</p>
并且我想使用XSLT将其转换为此:
<p>
This is
<hi>
just some <i>happy</i> text
</hi>
that might continue here.
</p>
因此,font [text()=“ start”]和font [text()=“ stop”]之间的所有内容(节点,文本和注释)都嵌套在一个新的hi-element中。
我尝试过:
<!-- identity template here-->
<xsl:template match="font[text()='start']">
<xsl:element name="hi">
<!-- FOLLOWING:SIBLING UNTIL THE NEXT font[text()='stop'] -->
<xsl:value-of select="following-sibling[????]"/>
</xsl:element>
</xsl:template>
<xsl:template match="font[text()='stop']"><!-- do nothing--></xsl:template>
但是????是我找不到正确规则的地方。我玩了半个小时,然后我觉得问起来可能会更快。
精确到下一站很重要,因为一个p元素中可能有许多这样的构造。
谢谢
答案 0 :(得分:0)
可能是这样的:
<xsl:for-each-group select="node()" group-starting-with="font[.='start']">
<xsl:for-each-group select="current-group()" group-ending-with="font[.='end']">
<xsl:choose>
<xsl:when test="current-group()[self::font[.='start'] and self::font[.='end']">
<hi>
<xsl:copy-of select="current-group()[not(self::font)]"/>
</hi>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="current-group()"/>
</
</
</
未经测试。