将新属性添加到java中的现有XML节点?

use*_*458 11 java xml nodes

我想为现有的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);
Run Code Online (Sandbox Code Playgroud)

但我得到以下异常:

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)**
Run Code Online (Sandbox Code Playgroud)

sub*_*ash 20

在DOM解析器中它非常容易.获取您的节点,只需使用此功能.

((Element)node).setAttribute("attr_name","attr_value");
Run Code Online (Sandbox Code Playgroud)

然后最后更新你的文件.像这样..

        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);
Run Code Online (Sandbox Code Playgroud)

  • 我已经尝试过这个但是我不能将setAttribute应用于节点 (4认同)
  • **doc.getElementsByTagName("process");**它返回NodeList.试试这样.**NodeList list = doc.getElementsByTagName("process");**.元素el =(元素)list.item(0); 那么你可以使用el.setAttribute("attr_name","attr_val"); (2认同)

Ser*_*sov 7

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

((Element)aNode).setAttribute("name", "value");
Run Code Online (Sandbox Code Playgroud)

  • @Stephan,将属性添加到不是元素的东西是没有意义的。 (3认同)
  • 嗯,是的,很明显。这正是应该发生的事情,因为向不是 Element 的东西添加属性是没有意义的。 (2认同)