提问人:user124 提问时间:2/21/2022 最后编辑:mzjnuser124 更新时间:2/21/2022 访问量:1035
在 java 中解析 Xml 文件以获取与给定标签值匹配的元素
Parsing Xml file in java to fetch the element matching given tag value
问:
我有一个如下的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?
答:
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
两种解决方案都运行良好
评论