2016-11-28 84 views
-1

我有以下過程的HTML。如何按XSL中的元素進行分組

<p class="Ahead">FIRST SECTION</p> 
    <p class="Text">with a moisture content of 16.34</p> 
    <p class="Ahead">SECOND SECTION</p> 
    <p class="Bhead">Second First Section</p> 
     <p class="Text">with a moisture content of 20.56</p> 
     <p class="Chead">Second first first section</p> 
     <p class="Text">with a moisture content of 48.15</p> 

未來,Bhead和Chead應該是個體小組。它如何分組。

輸出應該如下。

<sec> 
    <title>FIRST SECTION</title> 
    <p class="Text">with a moisture content of 16.34</p> 
</sec> 
<sec> 
    <title>SECOND SECTION</title> 
    <sec 
    <title>Second First Section</title> 
    <p class="Text">with a moisture content of 20.56</p> 
    <sec> 
     <title>Second first first section</title> 
     <p class="Text">with a moisture content of 48.15</p> 
    </sec> 
    </sec> 
</sec> 

在此先感謝。

回答

0

事情是這樣的:

<xsl:function name="f:group"> 
    <xsl:param name="level" as="xs:integer"/> 
    <xsl:param name="population" as="element()*"/> 
    <xsl:variable name="name" select="('Ahead', 'Bhead', 'Chead')[$level]"/> 
    <xsl:for-each-group select="$population" 
    group-starting-with="p[@class=$name]"> 
    <xsl:choose> 
     <xsl:when test="@class='Text'"> 
     <xsl:copy-of select="current-group()"/> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:sequence select="f:group($level+1, current-group())"/> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:for-each-group> 
</xsl:function> 

則:

<xsl:template match="/"> 
    <xsl:sequence select="f:group(1, //p)"/> 
</xsl:template> 

沒有測試,只是一些對你下手。

+0

我不能告訴你你做錯了什麼,除非你告訴我你在做什麼。 –

相關問題