Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
注:使用Dom4j开发,需下载dom4j相应的jar文件。一般只需要导入dom4j-1.6.1.jar就可以,一旦提示没有找到类的话再将lib文件夹的jar包导入就OK了
eclipse中导入jar包方法:复制jar包,粘贴到lib文件夹中,没有就新建一个,然后右键选择BuildPath→ Add toBuild Path 将其变成奶瓶就可以了。
小提示:在用dom4j解析时,经常会导包,当导包错误时,一般会让你强转,看到这种现象就证明你导错包了
获得Document对象的三种方式:
1、读取XML文件,获得document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
2、解析XML形式的文本,得到document对象.
String text ="
Document document = DocumentHelper.parseText(text);
3、主动创建document对象.
//此处为没有XML文档,直接创建一个,其他解析器没有此方法
Document document = DocumentHelper.createDocument();
//创建根节点
Element root =document.addElement("members");
节点对象的获取:
获取文档的根节点
Element root = document.getRootElement();
取得某个节点的子节点.
Element element = node.element(“书名");
取得节点的内容
String text=node.getText();
注:获取节点也好属性也好,在dom4j中,方法名直接就是element或者attribute,没有什么getelement和getattribute的方法名
例: xml version="1.0" encoding="UTF-8"?>
<书架>
<书>
<书名>javaweb开发书名>
<作者>张孝祥作者>
<售价>59元售价>
<售价>159元售价>
书>
<书>
<书名>JavaScript网页开发书名>
<作者>张孝祥作者>
<售价>28.00元售价>
书>
书架>
查找元素:
//获取:<书名name="aaa">javaweb开发书名> 节点内容
public void test1() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
//dom4j解析只能从头开始解析从根节点书架到书再到书名,除非用到Xpath
String value = document.getRootElement().element("书").element("书名").getText();
System.out.println(value);
}
增加元素:
//向xml文档中添加一个售价节点
public void test4() throws Exception{
SAXReaderreader = new SAXReader();
Documentdocument = reader.read(new File("src/book.xml"));
//添加节点直接获取要被挂的节点,用addElement方法即可,addElement自动创建节点再挂上去,并且返回element对象
document.getRootElement().element("书").addElement("售价").setText("189元");
//更新XML文档
//1、创建格式化输出器用于设置码表,否则容易出现乱码的情况
//createPrettyPrint为漂亮的书写格式,createCompactFormat为经凑的书写格式,此格式一般不给人看,用于节约空间
OutputFormatformat = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
//2、多应用字节流,再传入格式化输出器
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
//3、将document对象传入
writer.write(document);
//4、关流
writer.close();
}
//向xml文档的指定位置添加一个售价节点
public void test5() throws Exception{
获取document对象
//创建要添加的节点
Element e = DocumentHelper.createElement("售价");
e.setText("39元");
//获取书下的所有子节点返回一个集合,然后按照角标再插入节点
List list = document.getRootElement().element("书").elements();
list.add(2, e);
更新XML文档
}
删除元素:
//删除第二个售价节点
public void test6() throws Exception{
获取document对象
//删除第二个售价节点
Element e = (Element) document.getRootElement().element("书").elements("售价").get(1);
e.getParent().remove(e);
更新XML文档
}
修改元素:
//修改节点的值:第二本书售价的值
public void test7() throws Exception{
获取document对象
Element e = (Element)document.getRootElement().elements("书").get(1);
e.element("售价").setText("890元");
更新XML文档
}
注:以上代码均可用Xpath进行简化