繁体   English   中英

我需要使用Java中的DOM将元素添加到xml文件中

[英]I need to add an element to an xml file using the DOM in Java

我在Java中使用DOM将元素添加到xml文件中时遇到问题

我知道有很多解决类似问题的方法,但是我没有成功地使它们为我服务,任何帮助将不胜感激。 谢谢男孩和女孩!

我当前添加新元素的方法

public static void createEntryXmlFile () {
  try{
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(new File(FILE)); 


        NodeList nodes = document.getElementsByTagName("CATALOG");


        // cd elements
        Element cd = document.createElement("CD");


        // title elements
        Element title = document.createElement("TITLE");
        title.appendChild(document.createTextNode("TITLE")); 
        cd.appendChild(title);

        // artist elements
        Element artist = document.createElement("ARTIST");
        artist.appendChild(document.createTextNode("ARTIST")); 
        cd.appendChild(artist);

        // company elements
        Element company  = document.createElement("COMPANY");
        company.appendChild(document.createTextNode("COMPANY")); 
        cd.appendChild(company);

        // country elements
        Element country = document.createElement("COUNTRY");
        country.appendChild(document.createTextNode("COUNTRY")); 
        cd.appendChild(country);

        // price elements
        Element price = document.createElement("PRICE");
        price.appendChild(document.createTextNode("PRICE")); 
        cd.appendChild(price);

        // year elements
        Element year = document.createElement("YEAR");
        year.appendChild(document.createTextNode("YEAR")); 
        cd.appendChild(year);

        Node n = (Element) cd;
        nodes.item(0).appendChild(cd);


  } catch (ParserConfigurationException | SAXException | IOException e) {
        System.out.println(e);
    }
}

XML文件的副本

<CATALOG>
  <CD>
    <TITLE>Empire Burlesque</TITLE>
    <ARTIST>Bob Dylan</ARTIST>
    <COUNTRY>USA</COUNTRY>
    <COMPANY>Columbia</COMPANY>
    <PRICE>10.90</PRICE>
    <YEAR>1985</YEAR>
  </CD>
  <CD>
    <TITLE>Hide your heart</TITLE>
    <ARTIST>Bonnie Tyler</ARTIST>
    <COUNTRY>UK</COUNTRY>
    <COMPANY>CBS Records</COMPANY>
    <PRICE>9.90</PRICE>
    <YEAR>1988</YEAR>
  </CD>
</CATALOG>

您显示的代码将现有的XML文件解析为内存中的DOM树,然后对该树进行更改,但是修改内存中的树不会影响磁盘上的文件,您需要自己明确地将其写回。

两种最常见的实现方法是从DOMSource到StreamResult的无操作Transformer ,或者通过将document.getImplementation()转换为DOMImplementationLS来使用DOM“加载和存储” API。 由于Transformer方法使用XSLT基础结构,因此可能无法与您正在使用的非名称空间感知DOM树配合使用(默认情况下, DocumentBuilderFactory不支持名称空间,因此必须显式配置它,以便在调用newDocumentBuilder之前) LS方法肯定是可以的,因为它完全是DOM库的一部分,它不涉及转换层。

在DOM操作语句之后添加以下代码,以便将更改写入FILE:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
try {
    Transformer transformer = transformerFactory.newTransformer();
    transformer.transform(new DOMSource(document), new StreamResult(new File(FILE)));
} catch (TransformerConfigurationException e) {
    e.printStackTrace();
} catch(TransformerException e) {
    e.printStackTrace();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM