dom4j和XPath的基本用法

1 篇文章 0 订阅
1 篇文章 0 订阅

Dom4j 和XPath的基本用法

dom4j

dom4j是一个解析xml的工具,它提供了读写xml的api。这里只介绍它读取xml的方式。

1.dom4j基本的使用

首先我们需要导入dom4j的包,jar包地址:http://central.maven.org/maven2/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar

如果使用的maven工程,下面是maven坐标:

<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>

2.获取xml文档对象

// 获取文档对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new FileInputStream("xml/demo.xml"));

// 获取根节点
Element root = doc.getRootElement();

3.Element 的常用方法

* 得到标签上指定属性的值:
    attributeVale(String name);


* 得到标签下的标签:
        - 获取标签的所有直接子标签
        List elements();
        - 获取标签的第一个直接子标签(指定标签名)
        Element element(String name);
        还有一个版本是 Element element(QName qName);
        
        - 获取标签的所有直接子标签(指定标签名)
        Element elements(String name);

本次操作的xml文档

<?xml version="1.0" encoding="utf-8"?>
<classroom grade="primary5">
	<persons>
		<teacher id="1">
			<property name="name" value="laosi"/>
			<property name="age" value="24"/>
		</teacher>
		
		<students>
			<student id="1">
				<property name="name" value="lisi"/>
				<property name="age" value="12"/>
			</student>
			<student id="2">
				<property name="name" value="zhangsan"/>
				<property name="age" value="12"/>
			</student>
			<student id="3">
				<property name="name" value="wangwu"/>
				<property name="age" value="12"/>
			</student>
		</students>
	</persons>
</classroom>

XPath

XPath 是xml的路径语言,使用路径表达式来操作xml文档,使用XPath操作xml文档更加便捷。

使用XPath,我们还需要导入一个依赖包http://central.maven.org/maven2/jaxen/jaxen/1.1-beta-6/jaxen-1.1-beta-6.jar

1.XPath的基本使用

dom4j提供了两个方法支持XPath搜索:

* List selectNodes(String expr);

* Node selectSingleNode(String expr);

我们首先还是获取Document对象,因为以上两个搜索方法都是Document的方法。

2.Xpath表达式的几种写法

第一种形式:
        /AAA/BBB/CCC:表示层级结构,表示AAA下面BBB下面的所有CCC
第二种形式:
        //BBB:选择文档中所有的BBB元素
第三种形式:
        /AAA/BBB/*:选择目录下的所有元素
        /*/*/*/BBB:选择有三个祖先元素的BBB元素
        //*:选择所有的元素
第四种形式:
        //AAA[1]/BBB:选择第一个AAA下的BBB元素
        //AAA/BBB[1]:选择所有AAA的第一个BBB元素
        //AAA/BBB[last()]:选择所有AAA的最后一个BBB元素
第五种形式:
        //@id:选择所有的id属性
        //BBB[@id]:选择具有id属性的BBB元素
第六种形式:
        //BBB[@id='b1'] :选择含有属性id并且其值为b1的BBB元素

3.路径的问题

如果我们的XPath表达式以 "/" 开头,那么表示相对于整个文档进行搜索;
如果我们的XPath表达式以结点(标签)名开头,那么表示相对于调用搜索方法的结点进行搜索;

举个例子:
    // 首先我们拿到了student的父标签 students
    Node students = doc.selectSingleNode("/classroom/persons/students");
    // 以下两种方式搜索的结果是相同的
    List<?> list1 = students.selectNodes("/classroom/persons/students/student"); // 以 "/" 开头
    List<?> list2 = students.selectNodes("student"); // 以标签名开头

 

 

 

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值