2011-08-17 60 views
3

是否可以使用XSLT對XML文件中的項目進行分組?XML中的組元素

輸入文件:

<start> 

<A> 
---data--- 
</A> 

<B> 
---data--- 
</B> 

<C> 
---data--- 
</C> 

<A> 
---data--- 
</A> 

<B> 
---data--- 
</B> 

</start> 

輸出應該是:

<start> 

<A> 
---data--- 
</A> 

<A> 
---data--- 
</A> 

<B> 
---data--- 
</B> 

<B> 
---data--- 
</B> 

<C> 
---data--- 
</C> 

</start> 

我該怎麼做,使用XSL?還是有更好的方法來做到這一點?

謝謝。

+0

它是通過分揀元素名稱? –

+0

有點這樣,是的...開始是根節點 – Anon

+0

所以,看看我的答案。 –

回答

6

樣品輸入:

<start> 
    <A>1</A> 
    <B>2</B> 
    <C>3</C> 
    <A>4</A> 
    <B>5</B> 
</start> 

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="start"> 
     <xsl:copy> 
      <xsl:for-each select="*"> 
       <xsl:sort select="name()"/> 

       <xsl:copy-of select="."/> 

      </xsl:for-each> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

輸出:

<start> 
    <A>1</A> 
    <A>4</A> 
    <B>2</B> 
    <B>5</B> 
    <C>3</C> 
</start> 
+0

如果元素包含其他密鑰?同樣的事情會起作用還是需要改變? – Anon

+0

此模板僅按元素的名稱排序元素。它不依賴於節點的內容。 –

+0

謝謝隊友......還有一個問題,如果根節點包含模式呢?例如。 ... ...模板匹配=似乎不允許更多引號? – Anon

0

與排序,分組不直接支持XSLT我覺得

0

是它是,試試這個....

<xsl:template match="/"> 
    <xsl:for-each select="start/*"> 
     <xsl:sort select="name(.)"/> 
     <xsl:element name="{name()}"> 
      <xsl:value-of select="." /> 
     </xsl:element> 
    </xsl:for-each> 
</xsl:template> 

+0

Kirill使用copy-to是一種更好的方法,因爲它會製作節點的精確副本,包括所有屬性和子節點 – Jerry