2010-05-21 58 views
3

我需要讓我的XSLT樣式表對我的XML文件的子節點進行排序,但只排序某些子節點。下面是的XML是什麼樣子的一個例子:XML和XSLT:需要它僅對某些子節點進行排序

<?xml version="1.0"?> 
<xmltop> 
<child1 num="1"> 
<data>12345</data> 
</child1> 

<child1 num="2"> 
<data>12345</data> 
</child1> 

<child2 num="3"> 
<data>12345</data> 
</child2> 

<child2 num="2"> 
<data>12345</data> 
</child2> 

<child2 num="1"> 
<data>12345</data> 
</child2> 
</xmltop> 

這是我使用的XSL文件:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/xmltop"> 
<xsl:copy> 
    <xsl:apply-templates> 
    <xsl:sort select="@num"/> 
    </xsl:apply-templates> 
</xsl:copy> 
</xsl:template> 
<xsl:template match="child2"> 
<xsl:copy-of select="."/> 
</xsl:template> 

</xsl:stylesheet> 

這爲我的問題,因爲節點被剝奪了他們的標籤,並他們的內容仍然存在,使我的XML無效。如果這是一個愚蠢的問題,我真的不是XSL的專家,所以請原諒我。

<child2>的排序正確。

謝謝。

+0

你忘了問一個問題......你忘了提供轉換所需的結果。 – 2010-05-21 00:57:35

+0

@MT,如果你以可理解的方式提及你的要求,它並不是一個愚蠢的問題。我可以看到你缺少必需的「關鍵」字,(比如你想將節點分組嗎?),並且更好地發佈你想要的理想輸出。 只需手動準備輸出文檔並將其發佈在此處即可。這讓每個人都明白你需要什麼。 (你的xsl代碼並非真正需要) – 2010-05-21 14:22:51

回答

2

它是沒有定義的輸出應該是什麼,所以這只是我在「猜模式」:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="xmltop"> 
    <xsl:copy> 
    <xsl:apply-templates> 
     <xsl:sort select="(name() = 'child2')*@num" 
     data-type="number"/> 
    </xsl:apply-templates> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

當這種變換所提供的XML文檔應用:

<xmltop> 
    <child1 num="1"> 
     <data>12345</data> 
    </child1> 
    <child1 num="2"> 
     <data>12345</data> 
    </child1> 
    <child2 num="3"> 
     <data>12345</data> 
    </child2> 
    <child2 num="2"> 
     <data>12345</data> 
    </child2> 
    <child2 num="1"> 
     <data>12345</data> 
    </child2> 
</xmltop> 

(我認爲是)想要的結果是生成的

<xmltop> 
    <child1 num="1"> 
     <data>12345</data> 
    </child1> 
    <child1 num="2"> 
     <data>12345</data> 
    </child1> 
    <child2 num="1"> 
     <data>12345</data> 
    </child2> 
    <child2 num="2"> 
     <data>12345</data> 
    </child2> 
    <child2 num="3"> 
     <data>12345</data> 
    </child2> 
</xmltop> 
+0

謝謝你,正是我想要的!我需要的輸出與輸入相同,除了按照此樣式表的順序排序節點。 – fiiv 2010-05-21 16:26:53

相關問題