使用JAVA合并多个XML文件的不同节点 [英] Merging different nodes of multiple XML files using JAVA

查看:209
本文介绍了使用JAVA合并多个XML文件的不同节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在arrayList中有一些xml文件,例如A.xml B.xml 我想合并一些节点,而其余部分则保留为使用java时的样子.我是新手,所以我不知道该怎么做.

I have some xml files in an arrayList, for example A.xml B.xml and I want to merge some of the nodes while the rest to remain as are using java. I'm new at using so I don't know how to do.

xml:

<?xml version="1.0" encoding="UTF-8"?>
<nta>
<declaration>
    bool A, B;
    bool C;
</declaration>
<template>
    <location id="1"  x="10" y="10"/>
    <transition>
        <source ref="3"/>
    </transition>    
</template>
<system> system AND;</system>
</nta>

B.xml:

<?xml version="1.0" encoding="UTF-8"?>
<nta>
<declaration>
    int f,k;
    bool D;
</declaration>
<template>
    <location id="100"  x="40" y="89"/>
    <transition>
        <source col="9"/>
    </transition>    
</template>
<system> system OR;</system>
</nta>

输出:

<?xml version="1.0" encoding="UTF-8"?>
<nta>
<declaration>
    bool A, B;
    bool C;
    int f,k;
    bool D;
</declaration>
<template>
    <location id="1"  x="10" y="10"/>
    <transition>
        <source ref="3"/>
    </transition>    
</template>
<template>
    <location id="100"  x="40" y="89"/>
    <transition>
        <source col="9"/>
    </transition>    
</template>
<system> system AND, OR;</system>
</nta>

基本上我想将declarationsystem以及其余部分合并到输出xml文件中以串行方式进行.如何使用JAVA做到这一点?抱歉,很长的帖子!!

Basically I want to merge the declaration and the system and the rest to be serial in the output xml file. How to do this using JAVA? Sorry for the long post!!!

推荐答案

与其他可用的XML处理API相比,对我来说, 拥有DOMBuilderSAXBuilder JDOM 更适合:

In comparison with other available XML processing API, to me, having DOMBuilder and SAXBuilder JDOM is better for:

  • 修改XML文档
  • 遍历XML树并随机访问任何部分
  • 合并文件

这是合并两个XML文档的完整工作示例:

This is a complete working example for merging two XML document:

    SAXBuilder builder = new SAXBuilder();
    Document doc1 = builder.build(new File("E:\\XML1.xml"));
    Document doc2 = builder.build(new File("E:\\XML2.xml"));

    String rootName = doc1.getRootElement().getName();
    Element newRoot = new Element(rootName);
    Document newDoc = new Document(newRoot);

    Element root1 = doc1.getRootElement();
    Element root2 = doc2.getRootElement();

         // creating declaraion element by merging the declaration content
    Element declaration = new Element("declaration");
    declaration.addContent(root1.getChildText("declaration"));
    declaration.addContent(root2.getChildText("declaration"));
    newRoot.addContent(declaration); // add declaration element to new document

         newRoot.addContent(root1.getChild("template").clone()); 
                       // directly adding template from document XML1, 
                      //after getting template child,
                     //it needs to be cloned to detached  from its parent  

     newRoot.addContent(root2.getChild("template").clone()); 
                       // same for document XML2

     /*** now code yourself  for system element here ***/

    XMLOutputter outputter = new XMLOutputter();
    outputter.output(newDoc, System.out); 
                  // output the new doc, pass your OutputStream to this function 

这篇关于使用JAVA合并多个XML文件的不同节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆