如何使用XSLT交换XML的两个节点?

如何使用XSLT交换XML的两个节点?,xml,xslt,Xml,Xslt,下面是我的源XML <Employee> <Position> <Operation>ADD</Operation> <ID>9876</ID> <Position> <Position> <Operation>REMOVE</Operation>

下面是我的源XML

    <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,很高兴听到提议的解决方案对您有效。请别忘了接受它作为答案。卡宾基我已经接受了答案。