Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用DOM解析器对XML中的节点进行排序_Java_Xml_Domparser - Fatal编程技术网

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

Java 使用DOM解析器对XML中的节点进行排序,java,xml,domparser,Java,Xml,Domparser,如何根据标记对XML节点进行排序并追加 新的XML使用DOM解析器,也可以使用DOM解析器。我们已经 广泛使用DOM解析器将节点追加到新文件中,但我无法对节点进行排序 任何帮助都将不胜感激 Input.xml <rss version="2.0"> <Configs> <Value>defaultValue</Value> <Config name="test1"> <

如何根据标记对XML节点进行排序并追加 新的XML使用DOM解析器,也可以使用DOM解析器。我们已经 广泛使用DOM解析器将节点追加到新文件中,但我无法对节点进行排序

任何帮助都将不胜感激

Input.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>

默认值
标题1
作者1
5600
02
标题2
作者2
6100
01
有些事
一些价值1
02
什么
一些价值2
03
有些事
一些价值3
01
Expected Output.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>

默认值
标题2
作者2
6100
01
标题1
作者1
5600
02
有些事
一些价值3
01
有些事
一些价值1
02
什么
一些价值2
03

您真的不想使用低级DOM接口来实现这一点。以下是如何在XSLT 3.0中实现这一点(安装Saxon HE后,您可以从Java调用XSLT 3.0):


您真的不想使用低级DOM接口来实现这一点。以下是如何在XSLT 3.0中实现这一点(安装Saxon HE后,您可以从Java调用XSLT 3.0):


谢谢,但我必须过滤很多元素。输入xml文件相当大。另外,根据输入参数,我们必须更改基本xml并创建一个新的xml文件。因此,我认为深入挖掘元素并执行诸如复制节点和更新值之类的操作会更容易。排序是唯一困扰我使用DOM解析器的问题。您所说的一切似乎都加强了使用XSLT之类的高级语言而不是使用低级DOM调用的理由。当然,这是你的电话。谢谢你,但我必须过滤很多元素。输入xml文件相当大。另外,根据输入参数,我们必须更改基本xml并创建一个新的xml文件。因此,我认为深入挖掘元素并执行诸如复制节点和更新值之类的操作会更容易。排序是唯一困扰我使用DOM解析器的问题。您所说的一切似乎都加强了使用XSLT之类的高级语言而不是使用低级DOM调用的理由。当然,这是你的决定。
<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>