0
兩次我有一個這樣的XML,XSLT -Grouping相同的內容
<doc>
<section>
<p id="main">aa</p>
<p id="main">bb</p>
<p id="main">cc</p>
<p id="para1">dd</p>
<p id="st_main">ee</p>
<p id="st_main">ff</p>
<p id="main">cc</p>
<p id="main">cc</p>
<p id="main">gg</p>
<p id="para2">hh</p>
<p id="main">ii</p>
<p id="st_main">jj</p>
<p id="st_main">cc</p>
<p id="main">cc</p>
<p id="para1">xx</p>
<p id="main">yy</p>
<p id="st_main">zz</p>
<p id="main">cc</p>
</section>
</doc>
我的要求是
1)分組由para
屬性<p>
並添加單獨的部分到每個<p>
組。
2)識別<p>
節點組,其id
屬性從st
開始放<st_start>
和<st_end>
在開始和在組
SO預期輸出結束時,
<doc>
<section>
<p id="main">aa</p>
<p id="main">bb</p>
<p id="main">cc</p>
</section>
<section type="para1">
<p id="para1">dd</p>
<ss_start/>
<p id="st_main">ee</p>
<p id="st_main">ff</p>
<ss_end/>
<p id="main">cc</p>
<p id="main">cc</p>
<p id="main">gg</p>
</section>
<section type="para2">
<p id="para2">hh</p>
<p id="main">ii</p>
<ss_start/>
<p id="st_main">jj</p>
<p id="st_main">cc</p>
<ss_end/>
<p id="main">cc</p>
</section>
<section type="para1">
<p id="para1">xx</p>
<p id="main">yy</p>
<ss_start/>
<p id="st_main">zz</p>
<ss_end/>
<p id="main">cc</p>
</section>
</doc>
我可以做到這一點任務分別使用以下xsl
<xsl:template match="section">
<xsl:for-each-group select="p" group-starting-with="p[starts-with(@id, 'para')]">
<section>
<xsl:if test="current-group()[1][not(@id='main')]">
<xsl:attribute name="type" select="current-group()[1]/@id"/>
</xsl:if>
<xsl:apply-templates select="current-group()"/>
</section>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="section">
<xsl:copy>
<xsl:for-each-group select="*" group-adjacent="starts-with(@id, 'st')">
<xsl:if test="current-grouping-key()">
<ss_start/>
</xsl:if>
<xsl:apply-templates select="current-group()"/>
<xsl:if test="current-grouping-key()">
<ss_end/>
</xsl:if>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
但是我無法將這兩個代碼一起運行並獲得所需的輸出。
任何人都可以建議如何組合上面的兩個代碼,並獲得預期的輸出?