XPath路径表达式入门
XPath路径表达式
- XPath路径表达式是XML文档中查找数据的语言
- 掌握XPath可以极大的提高在提取数据时的开发效率
- 学习XPath本质就是掌握各种形式表达式的使用技巧
在使用XPath前还要安装一个Jaxen,Jaxen是一个开源的XPath库。和dom4j一样的导入方式,
Jaxen下载地址:链接:https://pan.baidu.com/s/11uE43FyjrTpYSFy0zxdVJA 密码:znom
通过XPath表达式来实现对xml数据的筛选
1.创建方法xpath(String xpathExp) xpathExp代表传入的表达式
2.String file进行加载
3.SAXReader读取文件 read(file)
4.核心方法:doucument.selectNods(xxx); 用来执行XPath表达式 返回一个List<>集合用来包含所查询的节点
List<xx>中xx规定为Node,并不是Element,因为XPath表达式可以查询属性和标签,而Node是属性和便签的父类,所以使用Node
5.查询到节点后,要进行遍历,使用for循环,要进行强制类型转换
6.attributeValue(“xx”)可以直接获得属性的值
package com.cc.schemajava;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.Node;import org.dom4j.io.SAXReader;public class XPathTestor { public void xpath(String xpathExp) { String file = "C:UsersJunDesktopjava webjspday3XML2srccomccschemastudent.xml"; SAXReader read = new SAXReader(); try { Document document = read.read(file); List<Node> nodes = document.selectNodes(xpathExp); for(Node node : nodes) { Element emp = (Element)node; System.out.println("编号:"+emp.attributeValue("no")); System.out.println("姓名:"+emp.elementText("name")); System.out.println("年龄:"+emp.elementText("age")); System.out.println("分数:"+emp.elementText("score")); System.out.println("***************"); } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { XPathTestor test = new XPathTestor();// test.xpath("/students/student"); 必须从<students>下获取<student>标签,是有顺序的获取// test.xpath("//student"); 从整个XML中获取<student>标签,不考虑位置// test.xpath("//student[score<50]"); 从整个XML中获取<student>标签中<score>标签文本小于50的标签// test.xpath("//student[name='测试2号']"); 通过姓名来查找员工信息,注意:name=''是使用单引号// test.xpath("//student[@no=3304]"); 通过属性来查找员工信息,注意:格式为:@xx=yyy// test.xpath("//student[1]"); 获取员工编号最小的员工信息 (类似查找位置)// test.xpath("//student[last()]"); 通过last()函数来获取员工编号最大的员工信息// test.xpath("//student[position()<3]"); 通过范围来查找员工信息,position()<3 小于前3的员工信息// test.xpath("//student[3] | //student[8]"); 通过具体位置来查找员工信息,使用"|"可以同时输出多个员工信息 }}
test.xpath(“/students/student”); 必须从<students>下获取<student>标签,是有顺序的获取
test.xpath(“//student”); 从整个XML中获取<student>标签,不考虑位置
test.xpath(“//student[score<50]”); 从整个XML中获取<student>标签中<score>标签文本小于50的标签
test.xpath(“//student[name=’测试2号’]”); 通过姓名来查找员工信息,注意:name=”是使用单引号
test.xpath(“//student[@no=3304]”); 通过属性来查找员工信息,注意:格式为:@xx=yyy
test.xpath(“//student[1]”); 获取员工编号最小的员工信息 (类似查找位置,等于第一个)
test.xpath(“//student[last()]”); 通过last()函数来获取员工编号最大的员工信息 (类似查找位置,等于第一个),[last()-1]就是倒数第二个
test.xpath(“//student[position()<3]”); 通过范围来查找员工信息,position()<3 小于前3的员工信息
test.xpath(“//student[3] | //student[8]”); 通过具体位置来查找员工信息,使用”|”可以同时输出多个员工信息