2012-04-10 2 views
1

Java를 사용하여 병합하려는 두 개의 XML 파일이 하나의 XML 파일에 있습니다. 을 File1의Java에서 두 개의 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 : 감사합니다 ..! 하지만 구분 기호를 사용하여 원치 않는 요소를 작성하지 않도록하려면 어떻게해야합니까? – dmurali

+0

죄송합니다, 의미가 없습니다. 작은 예제를 줄 수 있습니까? – Prashanth

답변

1

당신은 당신이 자바 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