使用dom4j解析xml时,首先导入dom4j提供的jar包。
得到document的方法:
SAXReader reader=new SAXReader();
Document document=reader.read(url);
其中document的父节点 Node,如果在document里找不到想要的方法可以去Node里找。
document里常用的方法:
getRootElement():获取根节点,返回的是Element。Element也是一个接口,父节点是Node。
Element和Node里的方法:
getParent():获取父节点; addElement:添加标签
获取标签的方法
- element(qName):表示获取标签下面的第一个子标签。qName:标签名称。
- elements(qName):获取标签下面是qName的所有子标签(一层)。qName:标签名称。
- elements():获取标签下面的所有一层子标签。
使用dom4j实现查询操作
例如:查询person.xml标签name里所有的值。
步骤如下:
1.创建解析器
2.得到document
3.得到根节点
4.得到所有p1标签
5.得到name
6.得到name里的值
private static void selectName() {
//创建解析器
SAXReader reader=new SAXReader();
//得到document
Document document=reader.read("src/person.xml");
//得到根节点
Element root=document.getRootElement();
//得到p1
List<Element> list=root.elements("p1");
//遍历list
for (Element element : list) { //element是每一个list元素
//得到p1下的name元素
Element name1=element.element("name");
//得到name里的值
String s=name1.getText();
System.out.println(s);
}
}
将第一步创建解析器和第二步得到document,以及回写xml的步骤封装成方法,方便调用。
新建Dom4jUtils.java文件。
public class Dom4jUtils {
public static final String PATH="src/person.xml";
//创建解析器和返回document
public static Document getDocument(String path){
try{
SAXReader reader=new SAXReader();
//得到document
Document document=reader.read(path);
return document;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
//回写xml
public static void xmlWriters(String path,Document document){
try{
OutputFormat format=OutputFormat.createPrettyPrint();
XmlWriter xmlWriter=new XMLEventWriter(new FileOutputStream(path,format));
xmlWriter.write(document);
xmlWriter.close();//关闭流
} catch(Exception e){
e.printStackTrace();
}
}
}
使用dom4j实现添加操作
例如:在第一个< p1>标签后面添加一个元素< sex>男< /sex>。
步骤:
1.创建解析器
2.得到document
3.得到根节点
4.获取第一个p1
5.在p1下面添加元素
6.在添加完成之后的元素下添加文本
7.回写xml
//实现添加操作,添加一个<sex>元素
public static void addSex(){
//得到document
Document document=Dom4jUtils.getDocument(Dom4jUtils.PATH);
//得到根节点
Element root=document.getRootElement();
//获取第一个p1
Element p=root.element("p1");
//在p1下添加元素
Element sex1=p.addElement("sex");
//在sex添加文本
sex1.setText("男");
//回写xml
Dom4jUtils.xmlWriters(Dom4jUtils.PATH,document);
}
使用dom4j在特定位置实现添加操作
例如在第一个p1下面的age标签之前添加< school>edu< /school>
步骤:
1.创建解析器
2.得到document
3.得到根节点
4.获取第一个p1
5.获取p1下面的所有元素
6.在添加完成之后的元素下添加文本 ,age下标为1
7.回写xml
//实现在特定位置的添加操作,添加一个<school>元素
public static void addSchool(){
//得到document
Document document=Dom4jUtils.getDocument(Dom4jUtils.PATH);
//得到根节点
Element root=document.getRootElement();
//获取第一个p1
Element p=root.element("p1");
//获取p1下面的所有元素
List<Element> list=p.elements();
//创建元素
Element school=DocumentHandler.createElement("school");
//在school下创建文本
school.setText("edu");
//在特定位置添加
list.add(1,school);
//回写xml
Dom4jUtils.xmlWriters(Dom4jUtils.PATH,document);
}
使用dom4j实现修改节点的操作
例如:修改第一个p1下age元素的值
步骤:
1.得到document
2.得到第一个p1元素
3.得到p1下的age
4.修改值为30
5.回写xml
public static void modifAge(){
//修改节点age的值
//得到document
Document document=Dom4jUtils.getDocument(Dom4jUtils.PATH);
//得到第一个根节点
Element root=document.getRootElement();
//得到第一个p1节点
Element p=root.element("p1");
//得到p1下的age
Element age=p.element("age");
//修改age的值
age.setText("30");
//回写xml
Dom4jUtils.xmlWriters(Dom4jUtils.PATH,document);
}
使用dom4j实现删除节点的操作
例如:删除第一个p1下的< school>节点
步骤:
1.得到document
2.得到根节点
3.得到第一个p1标签
4.得到p1下的school标签
5.删除
6.回写xml
public static void del(){
//**使用dom4j实现删除节点的操作**
//得到document
Document document=Dom4jUtils.getDocument(Dom4jUtils.PATH);
//得到根节点
Element root=document.getRootElement();
//得到第一个p1
Element p1=root.element("p1");
//得到p1下的school标签
Element school=p1.element("school");
//删除
p.remove(school);
//回写xml
Dom4jUtils.xmlWriters(Dom4jUtils.PATH, document);
}
使用dom4j获得属性
为p1设定一个id=“aaa”,可以获取p1里面属性id的值。
步骤:
1.得到document
2.得到根节点
3.得到第一个p1元素
4.得到p1里的值
//获取属性
public static void getValue(){
//得到document
Document document=Dom4jUtils.getDocument(Dom4jUtils.PATH);
//得到根节点
Element root=document.getRootElement();
//得到第一个p1
Element p=root.element("p1");
//得到p1里面的属性值,通过attributeValue
String value=p1.attributeValue("id"); //参数是属性的名称
System.out.println(value);
}