首页 > 解决方案 > 从 xml 中获取特定值

问题描述

我正在尝试从 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 文件的在线资源所做的尝试

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

请协助

标签: javaxml

解决方案


如果您想从 XML 中获取特定值,与 DOM 解析器 API 相比,XPath API 可能更方便。这是一个检索“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());

推荐阅读