gpt4 book ai didi

java - 使用 DOM 解析器对 XML 中的节点进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 09:33:37 25 4
gpt4 key购买 nike

如何根据标签对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com