使用 XSLT 对子元素进行排序
Posted
技术标签:
【中文标题】使用 XSLT 对子元素进行排序【英文标题】:Sorting sub-elements with XSLT 【发布时间】:2019-05-08 12:42:57 【问题描述】:我有一个由几个子元素组成的 xml 文件。我试图通过 xsl 从我的 xml 文件中按字母顺序输出所有名称,但它似乎不起作用。
我做错了什么?
数据.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>
排序名称.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>
输出正确但不按字母顺序:
<?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>
提前谢谢你。
【问题讨论】:
【参考方案1】:您将错误的节点 (characters|bodies|tires
) 排序为他们没有的 (name
)。试试吧:
<xsl:template match="/root">
<results>
<xsl:for-each select="*/*">
<xsl:sort select="name"/>
<xsl:copy-of select="name"/>
</xsl:for-each>
</results>
</xsl:template>
【讨论】:
以上是关于使用 XSLT 对子元素进行排序的主要内容,如果未能解决你的问题,请参考以下文章
如何获取具有相同名称的元素并根据 XSLT 中的子节点值对它们进行排序