如何使用 dom 解析器在 java 中根据另一个 XML 文件对一个 XML 文件中的标签重新排序

How to re order the tags in one XML file based on another XML file in java using dom parser

提问人:Yogendra 提问时间:4/27/2023 最后编辑:BorjaYogendra 更新时间:4/28/2023 访问量:20

问:

我有一个XML文件,比如source.xml

<students>

  <student2>

    <college>SIET</college>

    <name>Rithvik</name>

  </student2>   

  <student1>

    <college>SCET</college>

    <name>Prabhas</name>

  </student1>

</students>

还引用了XML文件,例如引用.xml

<students>

  <student1>

    <name>Prabhas</name>

    <college>SCET</college>

  </student1>

  <student2>

     <name>Ritvik</name>

     <college>SIET</college>

  </student2>   

</students>

我的要求是根据引用的XML文件对源XML文件的标签重新排序。 最后,源 XML 变得像引用的 XML。

输出:源 .xml

<students>

  <student1>

    <name>Prabhas</name>

    <college>SCET</college>

  </student1>

  <student2>

     <name>Ritvik</name>

     <college>SIET</college>

  </student2>  
 
</students>

我已经尝试了很多方法,但找不到解决方案。 如果你能帮助我,那将是一个很大的帮助

Java 解析 XML 解析 DomParser

评论

0赞 Parfait 4/28/2023
请发布完整的 XML 示例,以获得最小的可重现示例。如果此标记完整内容,则此类标记不符合 XML 的条件。

答:

1赞 Michael Kay 4/27/2023 #1

我看不出有任何可以想象的理由想要用 DOM 而不是 XSLT 来做到这一点。

在 XSLT(2.0 或 3.0)中:

(a) 例如,按照元素名称在参考文档中出现的顺序获取元素名称列表

<xsl:variable name="elNames" 
     select="doc('reference.xml')//person[1]/*/local-name()"/>

(b) 根据以下列表对输入文档中 person 元素的子元素进行排序:

<xsl:template match="person">
  <person>
    <xsl:perform-sort select="*">
      <xsl:sort select="index-of($elNames, local-name())"/>
    </xsl:perform-sort>
  </person>
</xsl:template>