it-swarm.com.de

Hinzufügen neuer Attribute zu einem vorhandenen XML-Knoten in Java?

Ich möchte einem vorhandenen XML-Knoten ein Attribut hinzufügen. Ich möchte meiner XML-Datei keine neuen Elemente (neue Knoten) hinzufügen, sondern nur ein neues Attribut hinzufügen. Wie kann ich das machen?

Insbesondere habe ich diese Codezeilen ausprobiert:

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

Aber ich bekomme folgende Ausnahme:

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

in DOM-Parser ist das sehr einfach. Holen Sie sich Ihren Knoten und verwenden Sie einfach diese Funktion.

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

aktualisieren Sie anschließend Ihr Dokument. so was..

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

Am einfachsten und am kürzesten ist es, den Knoten in org.w3c.dom.Element umzuwandeln und anschließend setAttribute darauf aufzurufen:

((Element)aNode).setAttribute("name", "value");
6
Sergey Tarasov

Sie könnten es in ein paar Zeilen mit xslt machen. Oracle hat ein halbwegs anständiges Tutorial mit allen Code-Ausschnitten http://docs.Oracle.com/javase/tutorial/jaxp/xslt/transformingXML.html

Das Schlüsselbit für Ihre Xslt wäre etwa das Folgende:

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

Empfohlener Ansatz:

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

Situativer Ansatz:

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

Verwenden Sie den Try-Catch-Ansatz nur, wenn Sie bereits wissen, dass alle Knoten, die Sie verarbeiten, vom Typ 'Element' sein sollten (und daher jeder andere Fall eine "Ausnahme" ist und vom Code abbricht).

0
Yeti