2010-05-21 23 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

相关问题