XSLT 用于根据元素的属性对特定 XML 标记的元素进行排序
Posted
技术标签:
【中文标题】XSLT 用于根据元素的属性对特定 XML 标记的元素进行排序【英文标题】:XSLT for sorting elements of particular XML tags based on elements' attribute 【发布时间】:2019-06-10 03:03:41 【问题描述】:想要转换(排序)“特定标签的元素”
我是 XSLT 的新手。因此需要了解 XSLT 如何处理特定标记。
当前 XML
<root>
<tag>bla bla bla</tag>
<tag>foo foo foo</tag>
<tag>
<particular-tag>
<element attrib="2"/>
<element attrib="3"/>
<element attrib="4"/>
<element attrib="1"/>
</particular-tag>
<particular-tag>
<element attrib="5"/>
<element attrib="3"/>
<element attrib="4"/>
</particular-tag>
</tag>
</root>
所需的 XML
<root>
<tag>bla bla bla</tag>
<tag>foo foo foo</tag>
<tag>
<particular-tag>
<element attrib="1"/>
<element attrib="2"/>
<element attrib="3"/>
<element attrib="4"/>
</particular-tag>
<particular-tag>
<element attrib="3"/>
<element attrib="4"/>
<element attrib="5"/>
</particular-tag>
</tag>
</root>
提前致谢。您可以向我推荐在线学习资源,我可以在其中使用 XML-XLST。
【问题讨论】:
【参考方案1】:这应该会产生您正在寻找的结果。 希望对您有所帮助。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8"/>
<xsl:template match="particular-tag">
<particular-tag>
<xsl:apply-templates select="element">
<xsl:sort select="@attrib"/>
</xsl:apply-templates>
</particular-tag>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:choose>
<xsl:when test="node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@*"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
【讨论】:
感谢您的解决方案,我将<particular-tag>
替换为 <xsl:copy>
【参考方案2】:
此 XSLT 将产生所需的结果:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="particular-tag">
<xsl:copy>
<xsl:apply-templates select="*">
<xsl:sort select="@attrib"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
【讨论】:
根据这个问题请求解决方案Sorting cells as per ss:Index以上是关于XSLT 用于根据元素的属性对特定 XML 标记的元素进行排序的主要内容,如果未能解决你的问题,请参考以下文章