Как изменить значения нескольких тегов XML? - PullRequest
0 голосов
/ 28 августа 2018

Я пытался изменить значения нескольких тегов XML в Java. До сих пор я мог получить значения двух узлов, которые я хочу изменить, но при настройке значений он всегда переопределяет первый и второй.

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

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 28 августа 2018

Вы должны убедиться, что вы сначала обновляете правильный узел, например,

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

Полная демонстрация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...