我有以下 XML:
<root>
<nodeLevel1>
<nodeType1>node type 1</nodeType1>
<nodeType2><rank>3</rank></nodeType2>
<nodeType2><rank>1</rank></nodeType2>
<nodeType2><rank>4</rank></nodeType2>
<nodeType2><rank>2</rank></nodeType2>
<nodeType3>node type 3</nodeType3>
</nodeLevel1>
</root>
我使用以下 XSLT 对该 XML 进行排序:
<?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" version="1.0" encoding="UTF-8" omit-xml-declaration="no" indent="yes" media-type="text/html"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="nodeLevel1">
<xsl:copy>
<xsl:apply-templates select="node()|@*">
<xsl:sort select="rank" data-type="number" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
结果是:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<nodeLevel1>
<nodeType1>node type 1</nodeType1>
<nodeType3>node type 3</nodeType3>
<nodeType2>
<rank>1</rank>
</nodeType2>
<nodeType2>
<rank>2</rank>
</nodeType2>
<nodeType2>
<rank>3</rank>
</nodeType2>
<nodeType2>
<rank>4</rank>
</nodeType2>
</nodeLevel1>
</root>
问题是所有“nodeType2”都不在我的 XML 中的正确位置。如何在“nodeType2”之前保留节点“nodeType1”,在“nodeType2”之后保留节点“nodeType3”。(解决方案不能使用元素名称“nodeType1”或“nodeType3”,因为它可以重命名为任何名称)
所以,结果应该是:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<nodeLevel1>
<nodeType1>node type 1</nodeType1>
<nodeType2>
<rank>1</rank>
</nodeType2>
<nodeType2>
<rank>2</rank>
</nodeType2>
<nodeType2>
<rank>3</rank>
</nodeType2>
<nodeType2>
<rank>4</rank>
</nodeType2>
<nodeType3>node type 3</nodeType3>
</nodeLevel1>
</root>
谢谢你的帮助。