2012-04-10 11 views
1

Ich habe zwei XML-Dateien, die ich am Ende mit java in eine XML-Datei zusammenführen möchte.Zwei XML-Dateien in Java zusammenführen und zusätzliche Informationen hinzufügen

Format von File1:

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

Format von File2:

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

Kann mir jemand sagen, wie sie fusionieren ich diese Dateien nach der in bestimmten Informationen Hinzufügen von beiden Dateien.

Und das ist, was ich versucht habe, aber es ist nicht meine Absicht, zu lösen ..

   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

Versuchen Sie diesen Beitrag zu lesen, der ein ähnliches Problem behandelt - http://StackOverflow.com/Questions/648471/Merge-Two-XML-files-in-Java – Prashanth

+0

@Sonu: Danke U ..! Aber wie verwende ich ein Trennzeichen, damit ich das Schreiben unerwünschter Elemente vermeiden kann? – dmurali

+0

Sorry, habe nicht verstanden, was du meinst. Kannst du ein kleines Beispiel geben? – Prashanth

Antwort

1

Sie benötigen einen XML-Parser verwenden, um zu erreichen, was Sie keine Notwendigkeit, wollen- Java IO-Klassen zu verwenden für Lesen und Schreiben in eine neue Datei. Sie können einen Streaming-XML-Parser verwenden (google für 'Java StAX'). Wenn Sie die Bibliothek javax.xml.stream verwenden, werden Sie feststellen, dass der XMLEventWriter eine bequeme Methode XMLEventWriter # add (XMLEvent) hat. Sie müssen lediglich die Elemente der obersten Ebene in jedem Dokument durchlaufen und sie mit dieser Methode zu Ihrem Writer hinzufügen, um das zusammengeführte Ergebnis zu generieren. Der einzige unkonventionelle Teil ist die Implementierung der Leserlogik, die nur die Knoten der obersten Ebene berücksichtigt (nur Aufrufe 'add').

+0

Danke U! Ich werde versuchen, Java StAX zu verwenden, und hoffentlich löst das meine Frage. – dmurali

+0

versuchen Sie, den gesamten Beitrag in dem Link zu lesen, den ich früher schickte. Es hat einen Kommentar und ein paar Beispiele. Probieren Sie es aus - es könnte helfen. Jemand hat Folgendes geschrieben: \t 'Zusätzlich zur Verwendung von Stax (was sinnvoll ist), wäre es wahrscheinlich einfacher mit StaxMate (http://staxmate.codehaus.org/Tutorial). Erstellen Sie einfach 2 SMInputCursors und ggf. einen Child-Cursor. Und dann typische Merge-Sortierung mit 2 Cursorn. Ähnlich wie DOM-Dokumente in rekursiv-absteigender Weise durchlaufen. ' – Prashanth

Verwandte Themen