在java中修改文件夹中的xml文件

在java中修改文件夹中的xml文件,java,xml,Java,Xml,由于我是java新手,我需要一些使用java修改xml文件的帮助。我想用另一个子标记添加一个子标记。我已尝试使用file获取所有文件。出于解析和修改的目的,我使用DocumentBuildFactory和元素。但在DocumentBuilder的parse方法中,文件不会显示为null 输入:- <Student> <personal-details> <name>abc</name> <age>21</age

由于我是java新手,我需要一些使用java修改xml文件的帮助。我想用另一个子标记添加一个子标记。我已尝试使用file获取所有文件。出于解析和修改的目的,我使用DocumentBuildFactory和元素。但在DocumentBuilder的parse方法中,文件不会显示为null

输入:-

<Student>
  <personal-details>
    <name>abc</name>
    <age>21</age>
  </personal-details>
  <address>
    <zip>560037</zip>
  </address>
</Student>
<Student>
  <personal-details>
    <name>abc</name>
    <age>21</age>
  </personal-details>
  <address>
    <place>
        <line1>some lane</line1>
    </place>
    <zip>560037</zip>
  </address>
</Student>

abc
21
560037
我想在address标记中添加一个子元素,并期望得到如下输出:-

输出:-

<Student>
  <personal-details>
    <name>abc</name>
    <age>21</age>
  </personal-details>
  <address>
    <zip>560037</zip>
  </address>
</Student>
<Student>
  <personal-details>
    <name>abc</name>
    <age>21</age>
  </personal-details>
  <address>
    <place>
        <line1>some lane</line1>
    </place>
    <zip>560037</zip>
  </address>
</Student>

abc
21
某条小路
560037
下面是我编写的java代码

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class AddTag {
  public static void main(String[] args) {
    File folder = new File("C:\\Users\\Desktop\\xmlfiles\\");
    File listOfFiles [] =folder.listFiles();
    String fileName = null;
    for(int i=0;i<listOfFiles.length;i++)
    {
        fileName = listOfFiles[i].getName();
    try{
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    Document doc = docBuilder.parse(folder+"\\"+fileName);
    System.out.println(doc); // op:-[#document: null]
    Node address = doc.getElementsByTagName("address").item(0);

    Element place = doc.createElement("place");
    place.appendChild(doc.createElement("line1").appendChild(doc.createTextNode("some lane")));
    address.appendChild(place);
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(doc);
    StreamResult result = new StreamResult(new File(folder+"\\"+fileName));
    transformer.transform(source, result);
    System.out.println("Done");
    }catch(Exception e){
        }
     }   
  }
}
导入java.io.File;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
公共类AddTag{
公共静态void main(字符串[]args){
文件夹=新文件(“C:\\Users\\Desktop\\xmlfiles\\”;
文件listOfFiles[]=folder.listFiles();
字符串文件名=null;
对于(int i=0;i这一行:

place.appendChild(doc.createElement("line1").appendChild(doc.createTextNode("some lane")));
将“some lane”文本节点追加到Place节点。appendChild返回根据文档添加的节点:

返回:添加的节点

所以把它分开,它应该会起作用。 试着这样做:

Node line1 = doc.createElement("line1");
line1.appendChild(doc.createTextNode("some lane"));
place.appendChild(line1);