【发布时间】:2013-04-24 12:00:58
【问题描述】:
我发现了一些与此类似的问题, 但努力将解决方案“弯曲”到我需要的东西, 很抱歉再次询问。
我有一些这样的 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 处理它以获得最终结果。
不幸的是,这并没有给我任何输出,这让我觉得某处有一个非常愚蠢的错字,但我看不到它。
【问题讨论】: