我正在尝试更改XML中元素的顺序:
<currentElementId>4</currentElementId>
<level value="1">
<level value="2">
Some text
</level>
<level value="3">
Some text
</level>
<level value="4">
Some text
</level>
</level>
结果应该是:
<currentElementId>4</currentElementId>
<level value="1">
<level value="2">
Some text
</level>
<level value="4">
Some text
</level>
<level value="3">
Some text
</level>
</level>
在currentElementId中指定的value =“4”的元素在value =“3”的元素之前移动,要移动的目标元素总是在currentElementId中指定。
最好的问候。
答案 0 :(得分:0)
首先,您必须具有单个根元素的格式良好的输入,例如:
<root>
<currentElementId>c</currentElementId>
<level value="1">
<level value="a">Alpha</level>
<level value="b">Bravo</level>
<level value="c">Charlie</level>
<level value="d">Delta</level>
</level>
</root>
然后你可以申请:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="level[following-sibling::level[1]/@value=/root/currentElementId]">
<xsl:copy-of select="following-sibling::level[1]"/>
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="level[@value=/root/currentElementId]"/>
</xsl:stylesheet>
获取结果:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<currentElementId>c</currentElementId>
<level value="1">
<level value="a">Alpha</level>
<level value="c">Charlie</level>
<level value="b">Bravo</level>
<level value="d">Delta</level>
</level>
</root>
请注意,我们假设所选元素不是第一个。