在 java 中解析 Xml 文件以获取与给定标签值匹配的元素

Parsing Xml file in java to fetch the element matching given tag value

提问人:user124 提问时间:2/21/2022 最后编辑:mzjnuser124 更新时间:2/21/2022 访问量:1035

问:

我有一个如下的xml:

<root>

<outer>
<name>abc</name>
<age>20</age>
</outer>

<outer>
<name>def</name>
<age>30</age>
</outer>

<outer>
<name>ghi</name>
<age>40</age>
</outer>


</root>

我想获取给定名称标签值的年龄标签值?

一种方法是,我可以通过使用Document接口解析此xml来准备名称到年龄的映射。

但是是否有任何 api 我可以只调用文档接口,我可以在其中说 fetch 元素,其中 name 是 say,ghi,然后我可以迭代所有属性以获取 age 属性或任何其他简单的方法来获取 age 其中 name 值是,比如 ghi?

Java DOM XML 解析

评论

0赞 Shawn 2/21/2022
我不熟悉java XML解析,但使用XPath应该很简单
0赞 user124 2/21/2022
我在org.w3c.dom.Document对象中有可用的xml

答:

1赞 Mads Hansen 2/21/2022 #1

XPath 是一个非常富有表现力的 API,可用于选择元素。

/root/outer[name = "ghi"]/age

本文 https://www.baeldung.com/java-xpath 提供了关于如何在 Java 中应用 XPath 的很好的概述和解释。

调整 XPath 的代码示例之一:

String name = "ghe";

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document xmlDocument = builder.parse(this.getFile());
XPath xPath = XPathFactory.newInstance().newXPath();

String expression = "/root/outer[name=" + "'" + name + "'" + "]/age";
node = (Node) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODE);
2赞 Shawn 2/21/2022 #2

事实证明,java 确实在 javax.xml.xpath中附带了一个 XPath 计算器,这使得这变得微不足道:

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;

public class Demo {
    public static void main(String[] args) throws Exception {
        String name = "ghi";
        // XPath expression to find an outer tag with a given name tag
        // and return its age tag
        String expression = String.format("/root/outer[name='%s']/age", name);
        
        // Parse an XML document
        DocumentBuilder builder
            = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document document = builder.parse(new File("example.xml"));

        // Get an XPath object and evaluate the expression
        XPath xpath = XPathFactory.newInstance().newXPath();
        int age = xpath.evaluateExpression(expression, document, Integer.class);

        System.out.println(name + " is " + age + " years old");       
    }
}

使用示例:

$ java Demo.java
ghi is 40 years old

评论

0赞 user124 2/21/2022
谢谢,我会尝试更新
0赞 user124 2/22/2022
两种解决方案都运行良好