1 // 使用xpath解决路径的问题 2 public static void findAnswer(File file)throws Exception{ 3 // 10.1获取解析器 4 SAXReader reader = getReader(); 5 // 10.2解析文档 6 Document doc = reader.read(file); 7 Element name = (Element) 8 doc.selectSingleNode("/linkmans/linkman[1]/linkman/name"); 9 System.out.println(name.getText()); 10 }
否则要以下解决,以下解决太杂乱。以下代码缺点:
发现如果需要遍历一个比较深的元素节点,那么需要多次的element()。
如:存储一个自己的隐私文件需要建立100个文件夹吗?
那么如果路径比较长需要进行路径访问的方式的优化。
如果在DOM4J进行解析查找元素可以使用类似Windows中的路径模式来查找元素那么就变得简单且高效。
1 // 获取linkman中的linkman 2 public static void findQuestion(File file)throws Exception{ 3 // 10.1获取解析器 4 SAXReader reader = getReader(); 5 // 10.2解析文档 6 Document doc = reader.read(file); 7 Element inner_name = doc.getRootElement() // 获取根元素 8 .element("linkman") // 获取第一个linkman元素 9 .element("linkman") // 获取第一个linkman中的第一个linkman元素 10 .element("name"); // 获取上面的name元素 11 System.out.println(inner_name.getText()); 12 }
Xpath简介
Xpath是一个独立的一个路径语言,主要的目的是为了查找路径中的元素。
那么DOM4J默认支持Xpath的路径查找。
常用的方法有以下的两种:
selectNodes(“xpath”) à 查询指定路径的所有的元素
selectSingleNode(“xpath”) à 查询指定路径的第一个元素
常用的Xpath路径写法
/AAA 指定从XML文档的根开始写路径
//BBB 指定从整个XML中搜索满足的元素名
/AAA/CCC/DDD/* 指定路径下所有的元素
//* 指定获取所有的元素
/AAA/BBB[1] 指定路径下的第一个元素,一定是以1开始的
/AAA/BBB[last()] 指定路径下的最后一个元素
//@id 指定要获取的属性元素
//BBB[@id] 指定带属性的元素
//BBB[@id='b1'] 指定属性值的元素
//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]