2012-04-10 18 views
1

私は、最後の1つのXMLファイルにjavaを使用してマージしたい2つのXMLファイルを持っています。ファイル1のJavaで2つのXMLファイルをマージし、余分な情報を追加する

フォーマット:File2のの

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

フォーマット:

  <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"); 

       } 

       } 
+0

同様の問題について説明しているこの記事をチェックしてみてください - http://stackoverflow.com/questions/648471/merge-two-xml-files-in-java – Prashanth

+0

@Sonu:ありがとうU ..!しかし、どのように私は不要な要素を書くことを避けることができるように区切り文字を使用しますか? – dmurali

+0

申し訳ありませんが、あなたが意味するものは得られませんでした。あなたは小さな例を挙げることができますか? – Prashanth

答えて

1

あなたはあなたがJavaのIOクラスを使用する必要がwant-ないものを達成するためにXMLパーサーを使用する必要があります新しいファイルへの読み書き。ストリーミングXMLパーサー(google for 'java StAX')を使用することができます。 javax.xml.streamライブラリを使用する場合、XMLEventWriterに便利なメソッドXMLEventWriter#add(XMLEvent)があります。あなたがしなければならないのは、各ドキュメントのトップレベル要素をループし、このメソッドを使ってマージ結果を生成することです。ファンキーな部分は、トップレベルのノードでのみ考慮する(「add」を呼び出すだけの)読者ロジックを実装することです。

+0

ありがとう!私はJava StAXを使ってみることにしました。うまくいけば、これは私の質問を解決します。 – dmurali

+0

私が先に送ったリンクの記事全体を読んでみてください。コメントといくつかの例があります。それを試してください - それは助けるかもしれません。誰かが次のように書いています - \t 'Staxを使うことに加えて(それは意味をなさない)、おそらくStaxMate(http://staxmate.codehaus.org/Tutorial)でもっと楽になるでしょう。 2つのSMInputCursorsと必要に応じて子カーソルを作成するだけです。そして、典型的なマージソートは2つのカーソルで行います。再帰的に降下する方法でDOM文書をトラバースするのと同様です。 – Prashanth

関連する問題