Add new attributes to an existing XML node in java?

49,306

Solution 1

in DOM parser it is very easy. get your node and simply use this function.

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

then finally update your document. like this..

        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);

Solution 2

The easiest and the shortest is to cast the node to org.w3c.dom.Element and then invoke setAttribute on it:

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

Solution 3

You could do it in a few lines using xslt. Oracle have a half decent tutorial with all the code snippets http://docs.oracle.com/javase/tutorial/jaxp/xslt/transformingXML.html

The key bit for your xslt would be something like the following:

    <xsl:template match="elementToAddNewAttrTo">
        <xsl:attribute name="newAttrName">NewAttrValue</xsl:attribute>
    </xsl:template>

Solution 4

Recommended approach:

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

Situational approach:

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

Only use the try-catch approach if you already know that all the nodes that you process should be of type 'Element' (and thus any other case is an "exception" and should break from the code).

Share:
49,306
user2966458
Author by

user2966458

Updated on August 14, 2020

Comments

  • user2966458
    user2966458 almost 4 years

    I want to add an attribute to an existing xml node.I don't want to add new elements (new nodes) to my xml file, I just want to add a new attribute. How can I do this?

    In particular I've tried this lines of code:

    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);
    

    But I get the following exception:

    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)**