[英]Sorting sub-elements with XSLT
I have an xml file that consists of several sub-elements. 我有一个由几个子元素组成的xml文件。 I'm trying to output all names alphabetically from my xml file via xsl but it doesn't seem to work.
我正在尝试通过xsl从我的xml文件中按字母顺序输出所有名称,但它似乎不起作用。
What am I doing wrong? 我究竟做错了什么?
data.xml data.xml中
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="sortnames.xsl"?>
<root>
<characters>
<character>
<name>Baby Peach</name>
</character>
<character>
<name>Baby Rosalina</name>
</character>
</characters>
<bodies>
<body>
<name>Standard Kart</name>
</body>
<body>
<name>Pipe Frame</name>
</body>
</bodies>
<tires>
<tire>
<name>Standard</name>
</tire>
<tire>
<name>Monster</name>
</tire>
</tires>
</root>
sortnames.xsl sortnames.xsl
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<results>
<xsl:for-each select="root/*">
<xsl:sort select="name"/>
<xsl:copy-of select=".//name"/>
</xsl:for-each>
</results>
</xsl:template>
</xsl:stylesheet>
The output is correct but not in alphabetical order: 输出正确,但不按字母顺序排列:
<?xml version="1.0" encoding="UTF-8"?>
<results>
<name>Baby Peach</name>
<name>Baby Rosalina</name>
<name>Standard Kart</name>
<name>Pipe Frame</name>
<name>Standard</name>
<name>Monster</name>
<name>Super Name</name>
<name>Cloud Name</name>
</results>
Thank you in advance. 先感谢您。
You are sorting the wrong nodes ( characters|bodies|tires
) by something they don't have ( name
). 您正在按错误的节点(
characters|bodies|tires
)用它们没有的东西( name
)进行排序。 Try instead: 请尝试:
<xsl:template match="/root">
<results>
<xsl:for-each select="*/*">
<xsl:sort select="name"/>
<xsl:copy-of select="name"/>
</xsl:for-each>
</results>
</xsl:template>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.