一、dom4j简介
dom4j是一个组织,针对xml解析,提供解析器,dom4j
不是Javase的一部分
使用步骤:
- 导入dom4j提供jar包
- 创建文件夹lib
- 复制jar包到lib下
- 右击jar包,buildpath—>add to buildpath
- 看到jar包,变成奶瓶的样子,即导入成功
二、得到document
SAXReader reader = new SAXReader();
Document document=reader.read(url);
- document父节点是node,方法在document里面找不到,可以去node里面找
- document里面的方法,getRootElement()获取根节点,返回的是element
- element是一个接口,父接口是node
element和node里面的方法
getParent();获取父节点
addElement();添加标签
三、使用dom4j查询xml
查询所有name里面的值
1.创建解析器
2.得到document
3.得到根节点 getRootElement();4.得到所有的p1
element(qname);
elements(qname);
element();
5.得到name
6.得到name的值
查询第一个name元素的值
/*
* 1、创建解析器
* 2、得到document
* 3、得到根节点
*
* 4、得到第一个p1元素
**element("p1")方法 返回Element
* 5、得到p1下面的name元素
**element("name")方法 返回Element
* 6、得到name元素里面的值
**getText方法
* */
获取第二个name元素的值
/*
* 1、创建解析器
* 2、得到document
* 3、得到根节点
*
* 4、得到所有的p1
**返回 list集合
* 5、遍历得到第二个p1
**使用list下标得到 get方法,集合的下标从 0 开始,想要得到第二个值,下标写 1
* 6、得到第二个p1下面的name
**element("name")方法 返回Element
* 7、得到name的值
**getText方法
* */
*在第一个p1标签末尾添加一个元素 sex>
/*
* 1、创建解析器
* 2、得到document
* 3、得到根节点
*
* 4、获取到第一个p1
*使用element方法
* 5、在p1下面添加元素
*在p1上面直接使用 addElement("标签名称")方法 返回一个Element
* 6、在添加完成之后的元素下面添加文本
* 在sex上直接使用 setText("文本内容")方法
* 7、回写xml
*格式化OutputFormat,使用createPrettyPrint方法,表示一个漂亮的格式
*使用类XMLWriter 直接new 这个类,传递两个参数
***第一个参数是xml文件路径 new FileOutputStream("路径")
***第二个参数是格式化类的值
* */
使用dom4j实现在特定位置添加元素
*在第一个p1下面的age标签之前添加 <school>ecit.edu.cn</schlool>
*步骤
/*
* 1、创建解析器
* 2、得到document
* 3、得到根节点
* 4、获取到第一个p1
*
* 5、获取p1下面的所有的元素
* **elements()方法 返回 list集合
* ** 使用list里面的方法,在特定位置添加元素
* **首先创建元素 在元素下面创建文本
-使用DocumentHelper类方法createElement创建标签
-把文本添加到标签下面 使用 setText("文本内容")方法
* *** list集合里面的 add(int index, E element)
* - 第一个参数是位置 下标,从0开始
* - 第二个参数是要添加的元素
* 6、回写xml
* */
**可以对得到document的操作和 回写xml的操作,封装成方法
**也可以把传递的文件路径,封装成一个常量(一般大写)
***好处:可以提高开发速度,可以提交代码可维护性
-比如想要修改文件路径(名称),这个时候只需要修改常量的值就可以了,其他代码不需要做任何改变。
获取第一个p1里面属性值id1
//获取第一个p1里面属性值id1(attributeValue();)
public static void getValues() throws Exception{
Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);
Element root = document.getRootElement();
Element p1 = root.element(“p1”);
String value1 = p1.attributeValue("id1");
System.out.println(value1);
}
使用dom4j支持xpath的操作
*可以直接获取到某个元素
*第一种形式
/AAA/DDD/BBB: 表示一层一层的,AAA下面 DDD下面的BBB
*第二种形式
//BBB: 表示和这个名称相同,表示只要名称是BBB,都得到
*第三种形式
/*:所有元素
*第四种形式
** BBB[1]: 表示第一个BBB元素
×× BBB[last()]:表示最后一个BBB元素
*第五种形式
**//BBB[@id]: 表示只要BBB元素上面有id属性,都得到
*第六种形式
**//BBB[@id='b1'] 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1