路径表达式:
通过路径快速的查找一个或一组元素
表达式:
1. / : 从根节点开始查找2. // : 从发起查找的节点位置 查找后代节点 ***3. . : 查找当前节点4. .. :查找父节点5. @ : 选择属性 . *属性使用方式:[@属性名='值'][@属性名>'值'][@属性名<'值'][@属性名!='值']
使用步骤:
通过Node类的两个方法, 来完成查找:
(Node 是 Document 与 Element 的父接口 )方法 1.// 根据路径表达式 , 查找匹配的单个节点Element e = selectSingleNode(" 路径表达式 ");方法 2.List<Element> es = selectNodes(" 路径表达式 ");
例1,解析本地XML:
package com.java.h.demo;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
/**
* @author s
* @version 1.0
* @date 2022-02-18 19:30
*/
public class Demo2 {
public static void main(String[] args) throws IOException, DocumentException {
// 1.获取输入流
FileInputStream fis = new FileInputStream("E://XML_JSONDemo/src/com/java/h/demo/demo.xml");
// 2.创建XML读取对象
SAXReader sr = new SAXReader();
// 3.读取并得到文档对象
Document doc = sr.read(fis);
// 4. 通过文档对象+xpath,查找所有的name节点
// List<Node> names = doc.selectNodes("//name");
// for(int i = 0; i < names.size(); i++){
// System.out.println(names.get(i).getName());
// System.out.println(names.get(i).getText());
// }
Node n = doc.selectSingleNode("//book[@id='1001']//name");
System.out.println(n.getName()+":"+n.getText());
fis.close();
}
}
例2,解析网络文档:
package com.java.h.demo;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
/**
* @author s
* @version 1.0
* @date 2022-02-18 19:51
*/
public class Demo3 {
public static void main(String[] args) throws IOException, DocumentException {
String phone = "13734036928";
// 1.获取到XML资源的输入流
URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
// 2.创建一个XML读取对象
SAXReader sr = new SAXReader();
// 3.通过读取对象 读取XML数据,并返回文档对象
Document doc = sr.read(is);
Node n = doc.selectSingleNode("//company");
System.out.println("运营商:"+n.getText());
}
}