我有以下 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>
谁能指出我的错误?谢谢 !