How to update multiple nodes in xml in Java

515 views Asked by At

I am trying to update multiple nodes in xml using nodelist. I am able to do it but i don't think my code is efficient. For updating two nodes I am repeating my code twice. I dont know how to loop it. I tried it from for loop, or tried making it an arraylist and everything but it is not working at all.

Here is my code:

String expressionDisclosure = "/DOCUMENT/ishobject/ishfields/ishfield[@name='FHPIDISCLOSURELEVEL']";
String expressionLanguage = "/DOCUMENT/ishobject/ishfields/ishfield[@name='DOC-LANGUAGE']";

String key = "";
String value = "";
try {
    DocumentBuilderFactory documentbuilderfactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentbuilder = documentbuilderfactory.newDocumentBuilder();
    Document doc = documentbuilder.parse(filepath);
    XPath xPath = XPathFactory.newInstance().newXPath();


    Node updateNode = null;

    NodeList nodelistLanguage = (NodeList) xPath.evaluate(expressionLanguage,
            doc.getDocumentElement(), XPathConstants.NODESET);
    NodeList nodelistDisclosure = (NodeList) xPath.evaluate(expressionDisclosure,
            doc.getDocumentElement(), XPathConstants.NODESET);

    key = nodelistLanguage.item(0).getTextContent();
    if (key != null) {
        value = getHashmap().get(key);
        updateNode = nodelistLanguage.item(0);
        updateNode.setTextContent(value);
    }


    key = nodelistDisclosure.item(0).getTextContent();
    if (key != null) {
        value = getHashmap().get(key);
        updateNode = nodelistDisclosure.item(0);
        updateNode.setTextContent(value);
    }
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(doc);

    StreamResult stream = new StreamResult(new File(filepath));
    transformer.transform(source, stream);


} catch (Exception ex) {
    ex.printStackTrace();
}

I am updating the node twice. Is this the proper way to do or can it be more efficient?

0

There are 0 answers