XSLT 如何在另一个兄弟之前移动兄弟
XSLT How to move sibling before another
我正在尝试更改 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 中指定。
此致。
首先,您必须有一个格式正确的输入,只有一个根元素,例如:
<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>
请注意,我们在此假设所选元素不是第一个元素。
我正在尝试更改 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 中指定。
此致。
首先,您必须有一个格式正确的输入,只有一个根元素,例如:
<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>
请注意,我们在此假设所选元素不是第一个元素。