получить значение c от xml - PullRequest
       1

получить значение c от xml

0 голосов
/ 13 февраля 2020

Я пытаюсь получить конкретное значение c из xml. Когда я перебираю узлы, значение никогда не возвращается. Вот пример xml

<Fields>
    <Field FieldName="NUMBER">
      <String>1234</String>
    </Field>
    <Field FieldName="TYPE">
      <String>JAVA</String>
    </Field>
        <Field FieldName="ATYPE">
      <String>BB</String>
    </Field>
</Fields>

Вот что я попытался сделать на основе этого онлайн-ресурса, который выглядит как мой пример xml file

private static void updateElementValue(Document doc) {
        NodeList employees = doc.getElementsByTagName("Field");
        Element emp = null;
        //loop for each
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            System.out.println("here is the emp " + emp);
            Node name = emp.getElementsByTagName("NUMBER").item(0).getFirstChild();
            name.setNodeValue(name.getNodeValue().toUpperCase());
        }


    }

Это онлайн-ресурс направляя мои попытки

https://www.journaldev.com/901/modify-xml-file-in-java-dom-parser

Пожалуйста, помогите

1 Ответ

1 голос
/ 14 февраля 2020

Если вы хотите получить заданное значение c из XML, XPath API может быть более удобным по сравнению с API анализатора DOM. Вот пример для получения значения элементов «String», которые являются дочерними элементами элементов «Field», имеющих атрибут «FieldName» со значением «NUMBER»:

// parse XML document from file    
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(new FileInputStream(fileName));

// prepare an XPath expression
XPathExpression xpath = XPathFactory.newInstance().newXPath().compile("/Fields/Field[@FieldName='NUMBER']/String");

// retrieve from XML nodes using XPath
NodeList list = (NodeList)xpath.evaluate(doc, XPathConstants.NODESET);

// iterate over resulting nodes and retrieve their values
for(int i = 0; i < list.getLength(); i ++) {
    Node node = list.item(i);
    // udate node content
    node.setTextContent("New text");
}

// output edited XML document
StringWriter writer = new StringWriter(); // Use FileWriter to output to the file
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
System.out.println(writer.toString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...