2017-04-16 3 views
0

Ich muss ein XML in eine andere Datei lesen und ein Element für eine bestimmte Anzahl von Malen in die neue Datei kopieren. Wie mache ich es in Java? Zum Beispiel, wenn dies ist mein xml zu lesen:wie man einen Teil eines XML in ein anderes Dokument kopiert

<company> 
    <name> XYZ </name> 
    <address> a123 </address> 
    <department> 
    <name> HR </name> 
    <employee> 
     <name>ABC</name> 
     <phone> 12345 </phone> 
    </employee> 
    </department> 
</company> 

Ich brauche diese XML in ein anderes Dokument zu kopieren, wobei ich den Mitarbeiter Knoten kopieren müssen und alle ist es geordneten Knoten für eine bestimmte ‚n‘ Anzahl von Zeiten. Angenommen, n = 3, wird mein neues XML-Dokument sein:

<company> 
    <name> XYZ </name> 
    <address> a123 </address> 
    <department> 
    <name> HR </name> 
    <employee> 
     <name>ABC</name> 
     <phone> 12345 </phone> 
    </employee> 
    <employee> 
     <name>LMN</name> 
     <phone> 45678 </phone> 
    </employee> 
    <employee> 
     <name>PQR</name> 
     <phone> 34567 </phone> 
    </employee> 
    </department> 
</company> 

Kann jemand geeigneten Java-Code vorschlagen, dies zu tun? Vielen Dank im Voraus :)

+2

Haben Sie etwas versucht? StackOverflow ist da, um mit Problemen zu helfen, die Sie in Ihrem Code haben, und nicht, dass Fremde Ihre Programmierung machen. – Pharaoh

+0

Ich habe versucht, mit dem XML-Parser zu parsen, habe versucht, einen neuen Knoten mit node.getParentNode() einzufügen. InsertBefore (newElement, node.getNextSibling()). Aber ich habe NullPointerException. Obwohl der Knoten einen Wert hat, gibt er null zurück. Keine Ahnung, warum ... Ich bin neu in Java mit XML-Codierung und habe daher nicht viel verwendet oder erforscht. – Neeshima

+1

Sie erhalten viel mehr Hilfe herauszufinden, was mit Ihrem Code falsch ist, wenn Sie es veröffentlichen;) – Pharaoh

Antwort

0

Sie können die Einheiten der Datei als die folgenden Objekte darstellen:

public class Employee{ 
    private String name; 
    private String phone; 
} 

public class Department{ 
    private String name; 
    private List<Employee> employees; 
} 

public class Company{ 
    private String name; 
    private String address; 
    private List <Department> departments; 
} 

und dann können Sie alle Ihre Daten füllen, wie Sie benötigen. Zum Schreiben der Daten in XML können Sie einen XML Serializer verwenden.

0
import java.io.File; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.OutputKeys; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 

public class XMLWriterDOM { 

    public static void main(String[] args) { 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder; 
     try { 
      dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.newDocument(); 
      //add elements to Document 
      Element rootElement = 
       doc.createElementNS("your file path", "department"); 
      //append root element to document 
      doc.appendChild(rootElement); 

      //append first child element to root element 
      rootElement.appendChild(getEmployee(doc, "LMN", "45678")); 

      //append second child 
      rootElement.appendChild(getEmployee(doc,"PQR", "34567")); 

      //for output to file, console 
      TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
      Transformer transformer = transformerFactory.newTransformer(); 
      //for pretty print 
      transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
      DOMSource source = new DOMSource(doc); 

      //write to console or file 
      StreamResult console = new StreamResult(System.out); 
      StreamResult file = new StreamResult(new File("/Users/pankaj/emps.xml")); 

      //write data 
      transformer.transform(source, console); 
      transformer.transform(source, file); 
      System.out.println("DONE"); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 


    private static Node getEmployee(Document doc, String name, String phone) { 
     Element employee = doc.createElement("employee"); 

     //create name element 
     employee.appendChild(getEmployeeElements(doc, employee, "name", name)); 

     //create age element 
     employee.appendChild(getEmployeeElements(doc, employee, "phone", phone)); 

     return employee; 
    } 


    //utility method to create text node 
    private static Node getEmployeeElements(Document doc, Element element, String name, String value) { 
     Element node = doc.createElement(name); 
     node.appendChild(doc.createTextNode(value)); 
     return node; 
    } 
} 
Verwandte Themen