1

最後に、Java を使用して 1 つの XML ファイルにマージしたい 2 つの XML ファイルがあります。

ファイル 1 のフォーマット:

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

ファイル 2 のフォーマット:

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

              }

               }
4

1 に答える 1

1

目的を達成するには、XML パーサーを使用する必要があります。新しいファイルの読み取りと書き込みに Java IO クラスを使用する必要はありません。ストリーミング XML パーサー ('java StAX' の場合は google) を使用できます。javax.xml.stream ライブラリを使用すると、XMLEventWriter に便利なメソッド XMLEventWriter#add(XMLEvent) があることがわかります。各ドキュメントのトップ レベルの要素をループし、このメソッドを使用してそれらをライターに追加し、マージされた結果を生成するだけです。唯一のファンキーな部分は、最上位ノードのみを考慮する (「追加」のみを呼び出す) リーダー ロジックを実装することです。

于 2012-04-10T11:27:58.580 に答える