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

时间:2015-11-11 04:25:12

标签: java xml

由于我是java新手,我需要一些使用java修改xml文件的帮助。我在文件夹中有一些xml文件。我想添加一个子标签与另一个子标签。我试图通过使用文件获取所有文件。为了解析和修改目的,我正在使用DocumentBuildFactory和Element。但是在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>

我写的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){
        }
     }   
  }
}

但是如果没有 line1 标记,我会在下面输出: -

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

1 个答案:

答案 0 :(得分:1)

这一行:

Set html = IE.document

追加&#34;某些车道&#34;文本节点到Place节点。 appendChild返回根据文档添加的节点:

http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html#appendChild(org.w3c.dom.Node) 返回:添加的节点。

因此将其分开并应该有效。 尝试这样的事情:

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