DOM4J 和xpath的简单实用

Dom4j是一个简单灵活的开放源代码的库,Dom4j是由早期开发Jdom的人分离出来独立开发的,与jdom不同的是,dom4j使用接口和抽象类型,虽然dom4japi相对要复杂一些,但是它提供了比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="[email protected]"></user>
	<user id="2" username="bbb" password="123" email="[email protected]"></user>
	<user id="3" username="ccc" password="123" email="[email protected]"></user>
	<user id="4" username="ddd" password="123" email="[email protected]"></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("登錄成功");
        }
        
        
	}
}

猜你喜欢

转载自blog.csdn.net/qq_38125626/article/details/82881812