2016-01-07 56 views
1

分組動態節點我有這樣的XML,XSLT - 內申請模板

<doc> 
    <aa type="xx">aaaa</aa> 
    <aa type="xx">bbbb</aa> 
    <aa type="yy">ccccc</aa> 
    <aa type="zz">dddd</aa> 
    <aa type="yy">eeee</aa> 
    <aa type="xx">ffff</aa> 
    <aa type="yy">gggg</aa> 
</doc> 

在我的場景類型屬性是一個變量,我需要組有序上面的XML通過檢查type屬性,類型ATTR值出現在頂部應優先,所以輸出應該是

<doc> 
    <aa type="xx">aaaa</aa> 
    <aa type="xx">bbbb</aa> 
    <aa type="xx">ffff</aa> 
    <aa type="yy">ccccc</aa> 
    <aa type="yy">eeee</aa> 
    <aa type="yy">gggg</aa> 
    <aa type="zz">dddd</aa>  
</doc> 

因爲類型屬性值是一個變量(我不知道確切的類型值),我寫了一個模板類似如下,

<xsl:template match="doc"> 
    <doc> 
     <xsl:apply-templates select="aa[@type='{@type}']"/> 
    </doc> 
</xsl:template> 

使用group-by它會更容易implememt做任務的方法,但我這樣做只是使用apply-template

回答

1

我知道你是想在一個有序的方式全部<aa>節點上應用模板。你可以用的for-each做到這一點,它允許排序:

<xsl:template match="doc"> 
    <doc> 
     <xsl:for-each select="aa"> 
      <xsl:sort select="@type"/> 
      <xsl:apply-templates select="."/> 
     </xsl:for-each> 
    </doc> 
</xsl:template> 
+3

'XSL:對'XSL sort'工作原理:應用-templates',所以你可以把它簡化爲'的' –

+0

很酷,不知道 – fafl

+0

@TimC,完美地工作。真的很有幫助。 – sanjay