XSLT中断节点与文本

时间:2014-05-23 11:25:07

标签: xml xslt-2.0

我有一个带有文本和节点的节点,在xslt 2.0中我必须创建包含节点之前的文本的新节点。 例如:

  <answer>
    I muscoli striati o 
    <correct>......................</correct> 
    sono detti anche muscoli volontari, perché il loro movimento è controllato coscientemente dal sistema 
    <correct>......................</correct>
     . Le 
    <correct>......................</correct> 
    sono le zone in cui le ossa entrano in contatto tra di loro.
  </answer>

结果必须如下:

   <answer>
        I muscoli striati o 
        <correct>......................</correct> 
   </answer>
   <answer>
        sono detti anche muscoli volontari, perché il loro movimento è controllato coscientemente dal sistema <correct>......................</correct>
   </answer>
   <answer>
         . Le <correct>......................</correct> 
   </answer>
   <answer>
        sono le zone in cui le ossa entrano in contatto tra di loro.
   </answer>

1 个答案:

答案 0 :(得分:2)

使用XSLT 2.0,您可以使用xsl:for-each-group,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="answer">
        <data>
            <xsl:for-each-group select="node()" group-ending-with="correct">
                <answer>
                    <xsl:apply-templates select="current-group()" />
                </answer>
            </xsl:for-each-group>
        </data>
    </xsl:template>
</xsl:stylesheet>