-2

1 つの xml ファイルを別の xml ファイルに変換するために xslt 2.0 を使用しています。XSLT 2.0 では、引数を 1 つ取る関数を作成しました。実際には、引数は<w:p>要素のコレクションです。以下のXMLファイルには、要素間に1つの>要素が含まれているとします。したがって、各要素をブロックで処理した後、関数をチェックインしたいと思います。<xsl:for-each-group><w:p><w:table<w:p>following-sibling::w:table<w:p><xsl:for-each-group>

XML ファイル

 <w:document>
      <w:p> para0</w:p>
      <w:p> para1</w:p>
      <w:table>table</w:table>
      <w:p>para3</w:p>
</w:document>

XSLT スニペット:

<xsl:for-each-group select="$paragraphs" group-starting-with="w:p">           
                <xsl:apply-templates select="current-group()"> <!-- for processing <w:p>elements -->
                </xsl:apply-templates>         

                <xsl:if test="following-sibling::w:table"> <!--check following-sibling of current <w:p> is <w:table> -->
                        <xsl:apply-templates select="following-sibling::w:table">    </xsl:apply-templates>
                    </xsl:if>    
    </xsl:for-each-group>    

しかし、最初の要素が処理されたときに呼び出されるチェック.2番目の要素が処理されたときにのみ呼び出されます.したがって、現在の処理要素のfollowing-sibling::w:table次の即時のみをチェックしたい...following-sibling

だから、この問題から抜け出すために私を導いてください...

4

1 に答える 1

0

xsl:for-each-group内では、コンテキストアイテムは現在のグループの最初のアイテムです。したがって、following-siblingは、グループの最初のアイテムを基準にして選択します。2番目の項目を基準にして選択する場合は、current-group()[2] / follow-sibling::xを使用します。(また、おそらく最初の次の兄弟だけが必要です。これは、following-sibling :: x [1]になります)。

しかし、あなたはあなた自身が発明した用語である「現在の処理要素」について話します。グループ内のすべてのアイテムの次の兄弟を処理しますか?その場合、xsl:for-each-group内にxsl:for-each select = "current-group()"が表示されると思います。

于 2012-07-31T08:06:24.873 に答える