0
我有一個xml像如下,XSLT - 在分組
<doc>
<section>
<p id="main">aa</p>
<p id="main">bb</p>
<p id="main">cc</p>
<p id="para1">dd</p>
<p id="main">ee</p>
<p id="main">ff</p>
<p id="main">gg</p>
<p id="para2">hh</p>
<p id="main">ii</p>
<p id="main">jj</p>
<p id="para1">xx</p>
<p id="main">yy</p>
<p id="main">zz</p>
</section>
</doc>
我的任務是小組根據id="para1"
和id='para2'
屬性上述內容,並添加一個節到每個組動態添加屬性。我期望的輸出是
<doc>
<section>
<p id="main">aa</p>
<p id="main">bb</p>
<p id="main">cc</p>
</section>
<section type="First para">
<p id="para1">dd</p>
<p id="main">ee</p>
<p id="main">ff</p>
<p id="main">gg</p>
</section>
<section type="Second para">
<p id="para2">hh</p>
<p id="main">ii</p>
<p id="main">jj</p>
</section>
<section type="First para">
<p id="para1">xx</p>
<p id="main">yy</p>
<p id="main">zz</p>
</section>
</doc>
的XSL做這個任務如下,
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="section">
<xsl:for-each-group select="p" group-starting-with="p[starts-with(@id, 'para')]">
<section type="?">
<xsl:apply-templates select="current-group()"/>
</section>
</xsl:for-each-group>
</xsl:template>
這XSL將做的工作,但你可以建議的方式,我怎麼可以添加加入type
屬性值<section>
節點基於組?
裏面'的for-each-group'上下文節點是在每個第一項如果test =「current-group()[1] [not(@ id ='main')]」>''爲' '。 –
@MartinHonnen我相信你是正確的,但我無法在規格中找到確認。它所說的是,*初始項目*是*上下文項目* **,用於排序**。 –
'for-each-group'部分定義爲「對於每個組,羣組中首先按人口順序排列的項目被稱爲組的初始項目。」然後稍後說:「包含在xsl:for-each-group元素中的序列構造函數按照處理順序對每個組計算一次......在序列構造函數中,上下文項是相關的初始項組......「 –