有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中向现有XML节点添加新属性?

我想向现有xml节点添加一个属性。我不想向xml文件中添加新元素(新节点),我只想添加一个新属性。我该怎么做

我特别尝试了以下几行代码:

Element process = doc.getElementsById("id");
    process.setAttribute("modelgroup", "");

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new  File("C:\\Users\\Blerta\\workspaceKEPLER\\XML_to_JSON\\SampleExample.xml"));
transformer.transform(source, result);

但我有以下例外:

Exception in thread "main" java.lang.NullPointerException
    at Main.appendAttributes(Main.java:172)
    at Main.displayNodes(Main.java:65)
    at Main.displayNodes(Main.java:138)
    at Main.main(Main.java:42)**

共 (4) 个答案

  1. # 1 楼答案

    建议的方法:

    Node node = ...;
    if(node.getNodeType() == Node.ELEMENT_NODE)
    {
        ((Element) node).setAttribute("name", "value");
    }
    

    情境方法:

    try
    {
        // ...
        Node node = ...;
        ((Element) node).setAttribute("name", "value");
        // ...
    }
    catch(ClassCastException e)
    {
        // Handle exception
    }
    

    只有在您已经知道您处理的所有节点都应该是“Element”类型(因此任何其他情况都是“例外”,应该与代码分离)的情况下,才使用try-catch方法

  2. # 2 楼答案

    在DOM解析器中,这非常简单。获取你的节点并简单地使用这个函数

    ((Element)node).setAttribute("attr_name","attr_value");
    

    最后更新你的文档。像这样

            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty(OutputKeys.METHOD, "xml");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "5");
            DOMSource source = new DOMSource(document);
            StreamResult result = new StreamResult(new File(tablePath));
            transformer.transform(source, result);
    
  3. # 4 楼答案

    最简单也是最短的方法是将节点强制转换为org.w3c.dom.Element,然后在其上调用setAttribute

    ((Element)aNode).setAttribute("name", "value");