【问题标题】:How to modify values of multiple XML tags?如何修改多个 XML 标签的值?
【发布时间】:2018-08-28 15:55:56
【问题描述】:

我一直在尝试修改 java 中多个 XML 标记的值。到目前为止,我能够获得要修改的两个节点的值,但是在设置值时,它总是用第二个覆盖第一个。

XML

 <driver>
    <BirthDate>1977-07-18</BirthDate>
    <Age>40</Age>                    
    <Gender>M</Gender>
    <PrimaryResidence>OwnCondo</PrimaryResidence>
 </driver> 

我正在尝试更改 Gender 和 PrimaryResidence 标签。

代码

// Modifies multiple XML nodes
 public static String changeCoreDiscountType(String reqXML) {
        Document document = null;
        String updatedXML = null;
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(reqXML));
            document = builder.parse(is);

            XPath xPath = XPathFactory.newInstance().newXPath();
            XPathExpression expression = xPath.compile("/driver/Gender | /driver/PrimaryResidence");
            NodeList nodeList = (NodeList) expression.evaluate(document,XPathConstants.NODESET);

            for(int i = 0; i < nodeList.getLength(); i++) {
                Node node = nodeList.item(i);
                node.setTextContent("F");
                node.setTextContent("OwnCondo");
                String value = node.getTextContent();
            }

            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(document);
            StreamResult result = new StreamResult(new StringWriter());
            transformer.transform(source, result);

            updatedXML = result.getWriter().toString();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return updatedXML;
    }

感谢任何帮助。

【问题讨论】:

    标签: java xml xpath


    【解决方案1】:

    您需要先检查您是否更新了正确的节点,例如

    for(int i = 0; i < nodeList.getLength(); i++) {
        Node node = nodeList.item(i);
    
        if(node.getNodeName() == "Gender")
            node.setTextContent("F");
        if(node.getNodeName() == "PrimaryResidence")
            node.setTextContent("OwnCondo");
    }
    

    Full Demo

    【讨论】:

    • 这就是我要找的。凉爽的。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2011-11-30
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多