xml - 如何使用 XSLT 交换两个 XML 节点?
问题描述
下面是我的源 XML,
<Employee>
<Position>
<Operation>ADD</Operation>
<ID>9876</ID>
<Position>
<Position>
<Operation>REMOVE</Operation>
<ID>1234</ID>
<Position>
<Employee>
需要将上面的代码转换成下面的代码,
<Employee>
<Position>
<Operation>REMOVE</Operation>
<ID>1234</ID>
<Position>
<Position>
<Operation>ADD</Operation>
<ID>9876</ID>
<Position>
<Employee>
基本上需要交换这样的位置,首先出现 REMOVE,然后出现 ADD。提前致谢。
解决方案
请尝试以下 XSLT。它使用所谓的身份转换模式。
Employee元素的模板根据其子元素Operation值指定Position元素的顺序。
XML
<?xml version="1.0"?>
<Employee>
<Position>
<Operation>ADD</Operation>
<ID>9876</ID>
</Position>
<Position>
<Operation>REMOVE</Operation>
<ID>1234</ID>
</Position>
</Employee>
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>
推荐阅读
- java - 如何从 Paho MQTT 消息中解析 JSON
- powershell - Powershell Invoke-RestMethod 分页
- json - 如何从 JSON 中检索 MARKER 的经纬度并将这些标记放在 Google Maps Flutter 上
- python - 在python中创建DataFrame的数据透视表(将列带到行)
- sql - 如何使用 jsonb 在 postgres 中创建索引?
- python - 60fps 和更新列表。该怎么办?
- javascript - 突变观察者触发两次
- r - 有没有办法以两种方式对数据框中的行进行排序
- javascript - 使用 lodash 将具有相同键的对象的值合并到一个数组中
- node.js - Nodejs 中的等待、链式承诺和流控制