【问题标题】:Merging two XML files in Java and also adding extra information在 Java 中合并两个 XML 文件并添加额外信息
【发布时间】:2012-04-22 16:16:17
【问题描述】:

我有两个 XML 文件,我想使用 java 将它们合并到最后一个 XML 文件中。

File1 的格式:

         <root>
          <a>
            <a>--include two lines under <a>
           <c/>
          </a>
            <d/> 
         </root>

File2 的格式:

         <root>
          <a>
           <c/>
          </a>
            <d/> -- include 1 more line at the last
         </root>

在两个文件中添加特定信息后,谁能告诉我如何合并这些文件。

这是我尝试过的,但它并没有解决我的目的..

                public class Xml {

               public static void main(String[] args) throws Exception {


              Writer output = null;
             output = new BufferedWriter(new FileWriter("H:\\merged_xml.xml"));
             String newline = System.getProperty("line.separator");
             output.write("<a>");

            // Read in xml file 1
            FileInputStream in = new FileInputStream("file1.xml");
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;

           while ((strLine = br.readLine()) != null) {

           if (strLine.contains("<a>")){
           strLine = strLine.replace("<a>", "info to include");
            }
           if (strLine.contains("</a>")){
           strLine = strLine.replace("</a>", "info to include");
            }

           output.write(newline);
           output.write(strLine);

          System.out.println(strLine);
           }

          // Read in xml file 2
           FileInputStream in2 = new FileInputStream("file2.xml");
           BufferedReader br2 = new BufferedReader(new InputStreamReader(in2));
           String strLine2;

            while ((strLine2 = br2.readLine()) != null) {

             if (strLine2.contains("<d>")){
               strLine2 = strLine2.replace("<d>", "info to include");
              }

            output.write(strLine2);
            output.write(newline);
            System.out.println(strLine2);
           }

          output.write("</d>");
          output.close();

          System.out.println("Merge Complete");

              }

               }

【问题讨论】:

标签: java xml merge


【解决方案1】:

您需要使用 XML 解析器来实现您想要的 - 无需使用 Java IO 类来读取和写入新文件。您可以使用流式 XML 解析器(google for 'java StAX')。如果您使用 javax.xml.stream 库,您会发现 XMLEventWriter 有一个方便的方法 XMLEventWriter#add(XMLEvent)。您所要做的就是遍历每个文档中的顶级元素,并使用此方法将它们添加到您的编写器以生成合并结果。唯一时髦的部分是实现仅考虑(仅调用“添加”)顶级节点的读取器逻辑。

【讨论】:

  • 尝试阅读我之前发送的链接中的整个帖子。它有评论和一些例子。试试看 - 它可能会有所帮助。有人写了以下内容 - '除了使用 Stax(这确实有意义)之外,使用 StaxMate (staxmate.codehaus.org/Tutorial) 可能会更容易。只需创建 2 个 SMInputCursors,如果需要,还可以创建子光标。然后是带有 2 个游标的典型合并排序。类似于以递归下降方式遍历 DOM 文档。'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 2013-05-15
  • 1970-01-01
  • 2017-10-25
  • 2014-10-14
  • 2021-04-29
  • 1970-01-01
相关资源
最近更新 更多