次のxmlがあります(目的のために簡略化されています)
<content>
<p1>blabla</p1>
<p2>blabla</p2>
<p2>blabla</p2>
<p1>blabla</p1>
<p3>blabla</p3>
<p1>blabla</p1>
<p2>blabla</p2>
<p2>blabla</p2>
<p1>blabla</p1>
<p3>blabla</p3>
<p2>blabla</p2>
</content>
そして、すべての p1 要素と p2 要素をグループ化したいのですが、後者は前の兄弟が p1 要素である場合に限られます。
次の xslt を使用しました:
<xsl:for-each-group select="*" group-adjacent="self::p1 or (self::p2 and preceding-sibling::p1[1])">
<xsl:choose>
<xsl:when test="current-grouping-key()">
<ol_coll>
<xsl:apply-templates select="current-group()"/>
</ol_coll>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
しかし、最初の前の要素ではなくツリー全体を見ているため、構文で何かを見落としています。だから私は次のリターンを得る
<content>
<ol_coll>
<p1>blabla</p1>
<p2>blabla</p2>
<p2>blabla</p2>
<p1>blabla</p1>
</ol_coll>
<p3>blabla</p3>
<ol_coll>
<p1>blabla</p1>
<p2>blabla</p2>
<p2>blabla</p2>
<p1>blabla</p1>
</ol_coll>
<p3>blabla</p3>
<ol_coll>
<p2>blabla</p2>
</ol_coll>
</content>
しかし、私が望んでいたのは次のとおりです。
<content>
<ol_coll>
<p1>blabla</p1>
<p2>blabla</p2>
</ol_coll>
<p2>blabla</p2>
<p1>blabla</p1>
<p3>blabla</p3>
<ol_coll>
<p1>blabla</p1>
<p2>blabla</p2>
</ol_coll>
<p2>blabla</p2>
<p1>blabla</p1>
<p3>blabla</p3>
<p2>blabla</p2>
</content>
私のエラーを指摘できる人はいますか? ありがとう !