我發現了一些類似的問題,但仍苦苦掙扎以解決我所需的問題,所以請再次提問。使用XSLT將XML排序爲XML
我有一些這樣的XML ....
<?xml version="1.0" encoding="UTF-8"?>
<ns:Root
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="urn:Test.Namespace"
xsi:schemaLocation="urn:Test.Namespace Test1.xsd"
>
<ns:element1 id="001">
<ns:element2 id="001.1" order="1">
<ns:element3 id="001.1.1" />
</ns:element2>
<ns:element2 id="001.2" order="2">
<ns:element3 id="001.1.2" />
</ns:element2>
</ns:element1>
<ns:element1 id="003">
<ns:element2 id="007.0" order="1">
<ns:element3 id="007.1.1" />
</ns:element2>
</ns:element1>
<ns:element1 id="002">
<ns:element2 id="002.1" order="3">
<ns:element3 id="002.1.1" />
</ns:element2>
<ns:element2 id="002.2" order="4">
<ns:element3 id="002.1.2" />
</ns:element2>
</ns:element1>
</ns:Root>
我寫了這個XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="urn:Test.Namespace"
>
<xsl:output indent="no" />
<xsl:template match="text()[not(string-length(normalize-space()))]"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates>
<xsl:sort select="/ns:Root/ns:element1/@id" />
<xsl:copy-of select="." />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="ns:element1">
<xsl:copy-of select="." />
<xsl:apply-templates />
</xsl:template>
<xsl:template match="ns:element2">
<xsl:copy-of select="." />
<xsl:apply-templates />
</xsl:template>
<xsl:template match="ns:element3">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
(我對那兒剽竊這個綱要從這裏how to sort xml?)
我希望能夠做到的是使用此XSLT通過element1的id屬性對我的原始XML進行排序並生成XML。這個想法是,一旦它被排序,我就可以用其他一些XSLT來處理,以獲得最終結果。
不幸的是,這並沒有給我任何輸出,這讓我覺得有一個非常愚蠢的錯字。某處,但我看不到它。
任何幫助,將不勝感激。
謝謝
你的命名空間依舊不匹配。在XML中它是'xmlns:ns =「urn:TestNamespace」'但在你的XSLT中顯示爲'xmlns:ns =「urn:Test.Namespace」' – 2013-04-30 16:53:28
這就是試圖一次做太多不同的事情。謝謝。它應該是現在。 – Nerdio 2013-05-01 09:08:14