基本表达式的几个问题
<hr> <employee no="3301"> <name>李铁柱</name> <age>37</age> <salary>3600</salary> <department> <dname>人事部</dname> <address>XX大厦-B105</address> </department> </employee> <employee no="3302"> <name>林海</name> <age>50</age> <salary>7000</salary> <department> <dname>财务部</dname> <address>XX大厦-B106</address> </department> </employee> <employee no="3303"> <name>安娜</name> <age>24</age> <salary>4600</salary> <department> <dname>人事部</dname> <address>XX大厦-B105</address> </department> </employee> <employee no="3304"> <name>张晓宇</name> <age>29</age> <salary>3000</salary> <department> <dname>后勤部</dname> <address>XX大厦-B108</address> </department> </employee> <employee no="3305"> <name>赵子轩</name> <age>19</age> <salary>1500</salary> <department> <dname>后勤部</dname> <address>XX大厦-B108</address> </department> </employee> <employee no="3306"> <name>张晓璇</name> <age>20</age> <salary>1700</salary> <department> <dname>后勤部</dname> <address>XX大厦-B108</address> </department> </employee> <employee no="3307"> <name>张檬</name> <age>43</age> <salary>8700</salary> <department> <dname>会计部</dname> <address>XX大厦-B103</address> </department> </employee> <employee no="3308"> <name>李梅</name> <age>33</age> <salary>8700</salary> <department> <dname>工程部</dname> <address>XX大厦-B104</address> </department> </employee> <employee no="3309"> <name>张三</name> <age>31</age> <salary>4000</salary> <department> <dname>会计部</dname> <address>XX大厦-B103</address> </department> </employee> <employee no="3310"> <name>李四</name> <age>23</age> <salary>3000</salary> <department> <dname>工程部</dname> <address>XX大厦-B104</address> </department> </employee> </hr>
老师,以该xml文档为例,
当表达式是 'hr'时,匹配的是hr的所有子元素 <employee></employee>,还是说匹配的是<hr></hr>?
当表达式是 '/hr'时,是匹配<hr></hr>这个根元素吗?
可以使用'/employee'吗?此时匹配的是什么?
当表达式是'//employee'时,匹配的是所有的<employee></employee>对吗?
谢谢老师!
27
收起
正在回答
3回答
同学你好,1. 单个斜杠只能获取根节点,因为根节点只有一个"/"和"/hr"意义相同。
2. 如果只写标签名,则就默认相当于增加"/"前缀,即"/hr"获取根路径hr标签。
3. 因为根节点名字不是employee,所以通过employee无法获取数据。
4. 前缀"//"则代表不区分层级按标签名获取所有employee。
5. 同学根据下方代码进行测试,查看获取到了几个节点。
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 = "d:/workspace/xml/src/hr.xml"; SAXReader reader = new SAXReader(); try { Document document = reader.read(file); List<Node> nodes = document.selectNodes(xpathExp); System.out.println("Xpath:" + xpathExp + " 获取节点数量:" + nodes.size()); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { XPathTestor testor = new XPathTestor(); //执行结果: Xpath:/hr 获取节点数量:1 testor.xpath("/hr"); //执行结果: Xpath:hr 获取节点数量:1 testor.xpath("hr"); //执行结果: Xpath:/employee 获取节点数量:0 testor.xpath("/employee"); //执行结果: Xpath:employee 获取节点数量:0 testor.xpath("employee"); //执行结果: Xpath://employee 获取节点数量:10 testor.xpath("//employee"); } }
祝学习愉快!
java工程师2020版
- 参与学习 人
- 提交作业 9400 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星