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文档第二本书名的值@Testpublic 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文档第二本书名的属性@Testpublic 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@Testpublic 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集合的顺序@Testpublic 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();}//删除添加的售价节点;@Testpublic 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();}@Testpublic 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("登錄成功");}}
}