如何使用XSLT交换XML的两个节点?
下面是我的源XML如何使用XSLT交换XML的两个节点?,xml,xslt,Xml,Xslt,下面是我的源XML <Employee> <Position> <Operation>ADD</Operation> <ID>9876</ID> <Position> <Position> <Operation>REMOVE</Operation>
<Employee>
<Position>
<Operation>ADD</Operation>
<ID>9876</ID>
<Position>
<Position>
<Operation>REMOVE</Operation>
<ID>1234</ID>
<Position>
<Employee>
添加
9876
去除
1234
需要将上面的代码转换为下面的代码
<Employee>
<Position>
<Operation>REMOVE</Operation>
<ID>1234</ID>
<Position>
<Position>
<Operation>ADD</Operation>
<ID>9876</ID>
<Position>
<Employee>
去除
1234
添加
9876
基本上需要交换这样的位置,删除出现在第一位,添加出现在第二位。
提前感谢。请尝试以下XSLT。它使用的是所谓的身份转换模式 Employee元素的模板根据其子元素操作值为Position元素指定顺序 XML
<?xml version="1.0"?>
<Employee>
<Position>
<Operation>ADD</Operation>
<ID>9876</ID>
</Position>
<Position>
<Operation>REMOVE</Operation>
<ID>1234</ID>
</Position>
</Employee>
添加
9876
去除
1234
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match='Employee'>
<xsl:copy>
<xsl:apply-templates select="Position[Operation='REMOVE']"/>
<xsl:apply-templates select="Position[Operation='ADD']"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
输出
<?xml version="1.0" encoding="utf-8"?>
<Employee>
<Position>
<Operation>REMOVE</Operation>
<ID>1234</ID>
</Position>
<Position>
<Operation>ADD</Operation>
<ID>9876</ID>
</Position>
</Employee>
去除
1234
添加
9876
您试图做什么?您的环境、API等是什么?什么有效,什么无效?而且您的XML格式不好,它工作得很好。非常感谢。@ArunPrakash,很高兴听到提议的解决方案对您有效。请别忘了接受它作为答案。卡宾基我已经接受了答案。