【问题标题】:I need to add an element to an xml file using the DOM in Java我需要使用 Java 中的 DOM 将元素添加到 xml 文件
【发布时间】:2015-10-21 22:45:17
【问题描述】:

我在使用 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>

【问题讨论】:

  • 你遇到了什么异常?
  • 试试这个:- stackoverflow.com/questions/17249758/…>
  • “我没能”是对问题的相当模糊的描述。究竟发生了什么?
  • 对不起,伙计们应该说,我没有收到任何错误或异常,这是问题所在,它执行但不更新
  • 我已打印文档,其中包含您的更改。

标签: java xml dom


【解决方案1】:

您展示的代码会将现有的 XML 文件解析为内存中的 DOM 树,然后对该树进行更改,但修改内存中的树不会影响磁盘上的文件,您需要显式编写它自己退出。

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

【讨论】:

    【解决方案2】:

    在您的 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();
    }
    

    【讨论】:

    • 干杯伙伴,把它写到文件里会很方便,我很傻!再次感谢
    猜你喜欢
    • 2014-09-12
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2013-01-04
    相关资源
    最近更新 更多