public class Demo01DOM4J {
public static void main(String[] args) throws DocumentException {
//获取解析器对象
SAXReader reader = new SAXReader();
//读取文件
Document document = reader.read("day22_2\\tianqi.xml");
//获取根元素
Element root = document.getRootElement();
//elements() : 获取当前元素的子元素
List elements = root.elements();
//遍历集合
for (Element e : elements) {
System.out.println(e);
}
System.out.println("---------------------------");
//element(String name) : 根据元素名获取指定子元素(如果有多个重名就获取到第一个)
Element e = root.element("上海");
System.out.println(e);
System.out.println("---------------------------");
//getName() : 获取元素的元素名
System.out.println(root);
System.out.println(root.getName());
//--------------------------
//获取北京里面的最高温度这个元素
Element maxwd = root.element("北京").element("温度").element("最高温度");
System.out.println(maxwd.getName()); //最高温度
//--------------------------
System.out.println("---------------------------");
//attributeValue(String name) : 获取当前元素下某个属性的值
String s = root.element("北京").attributeValue("province");
System.out.println(s);
System.out.println("---------------------------");
//elementText(String name) : 获取指定子元素的文本值,参数是子元素名称
//获取北京的最高温度
Element wd = root.element("北京").element("温度");
//获取温度里面子元素最高温度的值
String s1 = wd.elementText("最高温度");
System.out.println(s1);
//getText() : 获取当前元素的文本值
System.out.println("-----------------------------");
//获取北京的最高温度
Element mwd = root.element("北京").element("温度").element("最高温度");
//获取当前元素的值
String s2 = mwd.getText();
System.out.println(s2);
}
}
4.XPath演示
介绍
刚才我们发现,DOM4J原始写法太过于复杂,复杂在需要一层一层的获取子元素。
XPath的作用是快速的直接定位到目标元素。
XPath是一种路径的写法,下面的两个方法中支持XPath的写法。
Node叫做是节点,DOM里面所有的类型都是Node的子类
比如Document Element Attribute 都是 Node的子类
Node中的两个方法可以使用XPath:
List selectNodes("表达式"):使用Xpath作为参数查找多个节点
Node selectSingleNode("表达式") :使用Xpath作为参数查找某个节点(默认获取第一个)
Xpath表达式写法
绝对路径表达式方式
以/开头的路径就是绝对路径
// 以单/开头叫绝对路径,绝对路径必须从根元素开始写
//获取天气预报中上海子元素
List list = document.selectNodes("/天气预报/上海");
//遍历集合
for (Element element : list) {
System.out.println(element);
}
System.out.println("---------------------");
//Node selectSingleNode("表达式") :使用Xpath作为参数查找某个节点(默认获取第一个)
//获取天气预报中第一个上海子元素
Node node = document.selectSingleNode("/天气预报/上海");
System.out.println(node);
相对路径表达式方式
不以单/开头的路径叫相对路径,相对路径相对的是当前元素
//不以单/开头的路径叫相对路径,相对于当前元素
Node node1 = document.selectSingleNode("/天气预报/北京/温度");
System.out.println(node1);
//用相对路径的写法获取湿度
Node node2 = node1.selectSingleNode("../湿度");
System.out.println(node2);
System.out.println("------------------------------------------");
Node node3 = document.selectSingleNode("/天气预报/上海/温度/最高温度");
Node node4 = node3.selectSingleNode("../../湿度");
System.out.println(node4.getText()); // 50%
全文搜索路径表达式方式
//代表忽略中间的路径,不管中间有多少级
//全文搜索
//获取文本中的所有最高温度
List list1 = document.selectNodes("//最高温度");
//遍历集合
for (Element e : list1) {
System.out.println(e.getText());
}
System.out.println("--------------------------------");
//获取广州里面的所有最高温度
List list2 = document.selectNodes("//广州//最高温度");
//遍历集合
for (Element e : list2) {
System.out.println(e);
}
System.out.println("-----------------");
//获取广州里面的直接的最高温度
List list3 = document.selectNodes("//广州/温度/最高温度");
for (Element e : list3) {
System.out.println(e);
}
谓语条件查询 (了解)
可以对属性进行更精细的判断
//谓语查询
List list4 = document.selectNodes("//最高温度[@level='CC']");
//遍历集合
for (Element e : list4) {
System.out.println(e.getText());
}
总结