Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将xml的一部分复制到另一个文档_Java_Xml_Parsing - Fatal编程技术网

Java 如何将xml的一部分复制到另一个文档

Java 如何将xml的一部分复制到另一个文档,java,xml,parsing,Java,Xml,Parsing,我需要将一个xml读入另一个文件,并将一个元素复制指定次数到新文件中。我如何在java中实现它?例如,如果这是我要读取的xml: <company> <name> XYZ </name> <address> a123 </address> <department> <name> HR </name> <employee> <name>AB

我需要将一个xml读入另一个文件,并将一个元素复制指定次数到新文件中。我如何在java中实现它?例如,如果这是我要读取的xml:

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

XYZ
a123
人力资源
基础知识
12345
我需要将此xml复制到另一个文档中,其中我需要将employee节点及其所有子节点复制指定的“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>

XYZ
a123
人力资源
基础知识
12345
LMN
45678
PQR
34567

有人能推荐合适的java代码来实现这一点吗?提前感谢:)

您可以将文件的实体表示为以下对象:

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
序列化程序。

您尝试过什么吗?StackOverflow可以帮助您解决代码中的问题,而不是让陌生人编写代码。我尝试使用XML解析器进行解析,尝试使用Node.getParentNode().insertBefore(newElement,Node.getNextSibling())插入新节点。但我得到了NullPointerException。尽管节点有一个值,但它返回null。不知道为什么。。我不熟悉用XML编写Java代码,因此没有太多的使用或探索。如果您发布代码,您将得到更多的帮助来找出代码的错误;)
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;
    }
}