Dom4j是一个简单灵活的开放源代码的库,Dom4j是由早期开发Jdom的人分离出来独立开发的,与jdom不同的是,dom4j使用接口和抽象类型,虽然dom4j的api相对要复杂一些,但是它提供了比jdom更好的灵活性。
Dom4j是一个非常优秀的java xml api ,具有性能优异,功能强大和极易使用的特点,现在很多软件采用的DOM4J例如Hibernate,包括sun公司自己的jaxm也使用了DOM4J.
使用DOM4J开发需要下载想用的dom4j响应的jar文件。dom4j-1.6.1.jar
dom4j的api文档描写的比较详细:
实用dom4j对book.xml进行增删改查
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架>
<书架>
<书>
<书名 name="xxx">钢铁是怎样炼成的</书名>
<作者>尼·奥斯特洛夫斯基</作者>
<售价>16.5</售价>
</书>
<书>
<书名 name="yyy">假如给我三天光明</书名>
<作者>aobama</作者>
<售价>17.6</售价>
</书>
</书架>
package cn.dom4j;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
public class Demo1 {
//读物ml文档第二本书名的值
@Test
public void read() throws DocumentException{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element root = document.getRootElement();
Element book = (Element) root.elements("书").get(1);
String name = book.element("书名").getText();
System.out.println(name);
}
//读物ml文档第二本书名的属性
@Test
public void read1() throws DocumentException{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element root = document.getRootElement();
Element book = (Element) root.elements("书").get(1);
String value= book.element("书名").attributeValue("name");
System.out.println(value);
}
//在第一本书添加售价209
@Test
public void add() throws DocumentException, IOException{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element book = document.getRootElement().element("书");
book.addElement("售价").setText("209元");
//FileWriter fileWiter = new FileWriter("src/book.xml"); 会出现乱码
OutputStreamWriter fileWiter = new OutputStreamWriter(new FileOutputStream("src/book.xml"),"utf-8");
XMLWriter writer = new XMLWriter(fileWiter);
writer.write( document );
writer.close();
//或者 FileWrite查看的默认是gb2312表
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer2 = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer2.write(document);
writer2.close();
}
//在第一本书指定位置添加售价209 更改了list集合的顺序
@Test
public void add2() throws DocumentException, IOException{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element book = document.getRootElement().element("书");
List list = book.elements(); //书名售价
Element price = DocumentHelper.createElement("售价");
price.setText("309元");
list.add(2,price);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer2 = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer2.write(document);
writer2.close();
}
//删除添加的售价节点;
@Test
public void delete() throws DocumentException, IOException{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element price = document.getRootElement().element("书").element("售价");
price.getParent().remove(price);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer2 = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer2.write(document);
writer2.close();
}
@Test
public void update() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element book = (Element) document.getRootElement().elements("书").get(1);
book.element("作者").setText("aobama");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer2 = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer2.write(document);
writer2.close();
}
}
简单实用xpath来实现验证用户密码。xpath的语法比较简单,可查阅xpath Tutorial
users.xml
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="1" username="aaa" password="123" email="aa@123.com"></user>
<user id="2" username="bbb" password="123" email="bb@123.com"></user>
<user id="3" username="ccc" password="123" email="cc@123.com"></user>
<user id="4" username="ddd" password="123" email="dd@123.com"></user>
</users>
package cn.dom4j;
import java.io.File;
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;
/*使用xpath提取文檔數據
*
*
* */
public class Demo2 {
public static void main(String[] args) throws DocumentException {
/*SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
String value = document.selectSingleNode( "//作者" ).getText();
System.out.println(value);
List list = document.selectNodes("//作者");
for (int i=0;i<list.size();i++){
Element e =(Element) list.get(i);
System.out.println(e.getText());
}*/
String username="aaa";
String password="123";
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/users.xml"));
//user[@username='vvv' and @password='123']
Node node = document.selectSingleNode("//user[@username='" + username+"' and @password='"+ password+"']");
if (node==null){
System.out.println("用戶名或者密碼錯誤");
}else{
System.out.println("登錄成功");
}
}
}