Java:如何有效地合并多个xml文件以创建新的xml?

时间:2010-01-18 16:50:01

标签: java xml merge

Java 中:
假设我有3个xml文件

<student>lin</student> --  file1.xml

<student>Eric</student> --  file2.xml

<student>joe</student> --  file3.xml

如何合并这些xml(考虑到它们没有DTD或名称空间声明)来创建

<class><student>lin</student> <student>Eric</student>
<student>joe</student> </class> -- file4.xml

class 是我手动提供的包装节点

Ps :我使用xstream创建了xml的

3 个答案:

答案 0 :(得分:2)

我的文件很大我会使用 SAXParser ContentHandler会回显标签和内容。

像(伪代码):

print("<class>")
foreach(file in files)
  {
  mysaxparser.parse(new Handler() 
     {
     content="";

     void endElement(tag)
         {
          if(tag.equals("student")) print("<student>"+escapeXML(content)+"</student>"); 
         content="";
         }
     void characters(str)
         {
         content+=str;
         }
     },file);
  }
print("</class>");

如果您的文件足够小以适应内存:使用DocumentBuilder加载每个文档的DOM并调用importNode将文档合并为一个。

答案 1 :(得分:1)

如果您知道每个文件都是格式良好的,您可以将它们连接在一起(从它们中删除任何prolog条目后),以及包含根元素开始和结束标记的页眉和页脚。

String[] filenames = new String[]{"header.xml", "file1.xml", "file2.xml", "file3.xml", "footer.xml"};
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream("merged.xml");
for (String filename : filenames) {
    InputStream inputStream = new BufferedInputStream(new FileInputStream(filename);
    org.apache.commons.io.IOUtils.copy(inputStream, outputStream);
    inputStream.close();
}
outputStream.close();

答案 2 :(得分:1)

我认为正确的方法是将三个文件加载到DOM文档中,然后让其中一个文件采用其他两个文档中的节点,这样一切都由dom api处理,并且应该是万无一失的,而不是文本操作。

您可以通过查看DomDocument javadoc来实现此目的。