如何根据标签对 XML 节点进行排序并附加到 使用 DOM 解析器生成新的 XML 或者可以使用 DOM 解析器完成。我们已经 广泛使用 DOM 解析器将节点附加到新文件中,但我无法对节点进行排序。
任何帮助将不胜感激。
输入.xml
<rss version="2.0">
<Configs>
<Value>defaultValue</Value>
<Config name="test1">
<title>Title 1</title>
<author>Author1</author>
<value>5600</value>
<order>02</order>
</Config>
<Config name="test2">
<title>Title 2</title>
<author>Author2</author>
<Value>6100</Value>
<order>01</order>
</Config>
</Configs>
<Ratings>
<body>
<Items name="ac_object1">
<something1>something1</something1>
<value>someValue1</value>
<order>02</order>
</Items>
<Items name="op_object2">
<something1>something2</something1>
<value>someValue2</value>
<order>03</order>
</Items>
<Items name="vt_object3">
<something1>something3</something1>
<value>someValue3</value>
<order>01</order>
</Items>
</body>
</Ratings>
</rss>
预期输出.xml
<rss version="2.0">
<Configs>
<Value>defaultValue</Value>
<Config name="test2">
<title>Title 2</title>
<author>Author2</author>
<Value>6100</Value>
<order>01</order>
</Config>
<Config name="test1">
<title>Title 1</title>
<author>Author1</author>
<value>5600</value>
<order>02</order>
</Config>
</Configs>
<Ratings>
<body>
<Items name="vt_object3">
<something1>something3</something1>
<value>someValue3</value>
<order>01</order>
</Items>
<Items name="ac_object1">
<something1>something1</something1>
<value>someValue1</value>
<order>02</order>
</Items>
<Items name="op_object2">
<something1>something2</something1>
<value>someValue2</value>
<order>03</order>
</Items>
</body>
</Ratings>
</rss>
最佳答案
您确实不想使用低级 DOM 接口(interface)来执行此操作。以下是在 XSLT 3.0 中执行此操作的方法(您可以在安装 Saxon-HE 后从 Java 调用):
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform> version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="*[*/order]">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="number(order)"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:transform>
通过几行额外的代码,您还可以使用与 JDK 捆绑在一起的 XSLT 1.0 来完成此操作。
工作原理:
xsl:mode
声明表示元素的默认操作是复制该元素,然后处理其子元素xsl:strip-space
表示忽略输入中的空格xsl:output
表示在输出中添加缩进xsl:template
规则规定,当处理其孙子元素中包含order
元素的元素时,复制开始和结束标记,并按照其order
子元素的数值的排序顺序处理子元素。
关于java - 使用 DOM 解析器对 XML 中的节点进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56783426/