基本表达式的几个问题

基本表达式的几个问题

<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文档为例,

  1. 当表达式是 'hr'时,匹配的是hr的所有子元素  <employee></employee>,还是说匹配的是<hr></hr>?

  2. 当表达式是 '/hr'时,是匹配<hr></hr>这个根元素吗?

  3. 可以使用'/employee'吗?此时匹配的是什么?

  4. 当表达式是'//employee'时,匹配的是所有的<employee></employee>对吗?

    谢谢老师!

正在回答

登陆购买课程后可参与讨论,去登陆

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");
		
	}
}

祝学习愉快!

好帮手慕小尤 2020-07-22 10:14:57

同学你好,同学现阶段先以运行结果为准,同学描述的问题,老师会反馈给相关人员进行确认的。给您的学习带来不便,深感抱歉!

祝学习愉快!

好帮手慕小尤 2020-07-21 19:44:00

同学你好,

  1. hr 无法获取到内容

  2. /hr 无法获取到内容

  3. /employee 无法获取到内容

  4. //employee 同学理解是正确的。匹配的是所有的<employee></employee>

  5. 建议同学根据运行结果为准,如下图所示:

    http://img1.sycdn.imooc.com//climg/5f16d4ef09fc044f06140418.jpg

祝学习愉快!

  • 提问者 mahsiaoko #1
    我就是对这个比较疑惑,在4-8 xpath实验室这一节,hr,/hr,/employee都无法获得内容,但是这一节讲的是传入节点名的话,获得的是子节点,这不就应该获得<employee>节点吗?
    2020-07-21 20:53:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师