如何在Java中更新xml中的多个节点

时间:2016-12-19 11:14:31

标签: java xml transformation nodelist

我正在尝试使用nodelist更新xml中的多个节点。我能够做到这一点,但我不认为我的代码是有效的。为了更新两个节点,我重复了两次代码。我不知道如何循环它。我从for循环中尝试过它,或者尝试将它作为一个arraylist而且除了它之外什么都没有用。

这是我的代码:

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

我正在更新节点两次。这是正确的做法还是更有效率?

0 个答案:

没有答案