2017-04-16 134 views
0

我需要将xml读入另一个文件并将元素复制指定次数到新文件中。我如何在java中做到这一点?例如,如果这是我的XML阅读:如何将xml的一部分复制到另一个文档

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

我需要这个XML复制到另一个文件,其中我需要复制该员工节点和所有它的子节点达一指定的“N”数字。假设n = 3,我的新xml文档将是:

<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> 

有人可以建议合适的java代码来做到这一点吗?感谢提前:)

+2

你尝试过什么吗? StackOverflow可以帮助解决代码中存在的问题,而不是让陌生人进行编码。 – Pharaoh

+0

我尝试使用XML解析器进行解析,尝试使用node.getParentNode()。insertBefore(newElement,node.getNextSibling())插入新节点。但是我得到了NullPointerException。虽然节点有一个值,但它返回null。不知道为什么..我是Java编程XML的新手,因此没有使用或探索很多。 – Neeshima

+1

如果您发布代码,您将获得更多帮助,以查明代码出了什么问题;) – Pharaoh

回答

0

你可以代表你的文件的实体以下对象:

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; 
} 

,然后根据你需要,你可以填写你的所有数据。为了用XML编写数据,你可以使用一些XML串行器。

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; 
    } 
} 
相关问题