java xpath 解析xml_如何在Java中使用XPath读取XML

你可以试试这个。

XML文档

存为employees.xml.<?xml  version="1.0" encoding="UTF-8"?>

29

Pankaj

Male

Java Developer

35

Lisa

Female

CEO

40

Tom

Male

Manager

25

Meghan

Female

Manager

解析器类

这个类有以下方法列表项目

将返回输入ID的员工名称的方法。

将返回年龄大于输入年龄的员工姓名列表的方法。

返回女员工姓名列表的方法。

源代码import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.xpath.XPath;import

javax.xml.xpath.XPathConstants;import javax.xml.xpath.XPathExpression;import javax.xml.xpath.XPathExpressionException;import javax.xml.

xpath.XPathFactory;import org.w3c.dom.Document;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class Parser {

public static void main(String[] args) {

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

factory.setNamespaceAware(true);

DocumentBuilder builder;

Document doc = null;

try {

builder = factory.newDocumentBuilder();

doc = builder.parse("employees.xml");

// Create XPathFactory object

XPathFactory xpathFactory = XPathFactory.newInstance();

// Create XPath object

XPath xpath = xpathFactory.newXPath();

String name = getEmployeeNameById(doc, xpath, 4);

System.out.println("Employee Name with ID 4: " + name);

List names = getEmployeeNameWithAge(doc, xpath, 30);

System.out.println("Employees with 'age>30' are:" + Arrays.toString(names.toArray()));

List femaleEmps = getFemaleEmployeesName(doc, xpath);

System.out.println("Female Employees names are:" +

Arrays.toString(femaleEmps.toArray()));

} catch (ParserConfigurationException | SAXException | IOException e) {

e.printStackTrace();

}

}

private static List getFemaleEmployeesName(Document doc, XPath xpath) {

List list = new ArrayList<>();

try {

//create XPathExpression object

XPathExpression expr =

xpath.compile("/Employees/Employee[gender='Female']/name/text()");

//evaluate expression result on XML document

NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

for (int i = 0; i 

list.add(nodes.item(i).getNodeValue());

} catch (XPathExpressionException e) {

e.printStackTrace();

}

return list;

}

private static List getEmployeeNameWithAge(Document doc, XPath xpath, int age) {

List list = new ArrayList<>();

try {

XPathExpression expr =

xpath.compile("/Employees/Employee[age>" + age + "]/name/text()");

NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

for (int i = 0; i 

list.add(nodes.item(i).getNodeValue());

} catch (XPathExpressionException e) {

e.printStackTrace();

}

return list;

}

private static String getEmployeeNameById(Document doc, XPath xpath, int id) {

String name = null;

try {

XPathExpression expr =

xpath.compile("/Employees/Employee[@id='" + id + "']/name/text()");

name = (String) expr.evaluate(doc, XPathConstants.STRING);

} catch (XPathExpressionException e) {

e.printStackTrace();

}

return name;

}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值