Dom4j 操作, 节点查找 添加 删除 修改 。。。xPath

Dom4j 说明文档:http://blog.csdn.net/xj626852095/article/details/17000741

xPath说明文档: http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html

要解析的xml文件

<?xml version="1.0" encoding="UTF-8"?>

<书架> 
  <书 name="yyyyyyy"> 
    <书名>Java</书名>  
    <作者>张三</作者>  
    <打折价>9.9折</打折价>
    <售价>只要998</售价> 
  </书>  
  <书 memony="有优惠价"> 
    <书名 name="xxxxx">JavaScript网页开发</书名>  
    <作者>李四</作者>  
    <售价>28.00元</售价>  
    <优惠价>8折</优惠价>  
    <优惠价>8折</优惠价>  
    <优惠价>8折</优惠价> 
  </书> 
  <user username="kevin" passwd="123456"/>
  <user username="xiang" passwd="234567"/>  
</书架>

 

package com.kevin.java;

import static org.junit.Assert.*;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
import org.xml.sax.DocumentHandler;

public class Dom4j_Test {
	
	//Xpath使用
			@Test
			public void test4() throws DocumentException, IOException {
				SAXReader reader = new SAXReader();
				Document document = reader.read(new File("src/book1.xml"));
				String bookName = document.selectSingleNode("//书名").getText();
				System.out.println("bookName: " + bookName);
				
				//查找符合条件的User  //BBB[@id='b1'] 注意要有单引号
				String username = "kevin";
				String passwd = "123456";
				Node node = document.selectSingleNode
						("//user[@username='"+username+"' and @passwd='"+passwd+"']");
				if(node==null)
					System.out.println("不是注册用户");
				else
					System.out.println("注册用户");
				
			}
	
	//获得第二本数的书名, 属性值  , 添加售价节点
	@Test
	public void test1() throws DocumentException, IOException {
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File("src/book1.xml"));
		Element root =  document.getRootElement();
		Element book = root.elements("书").get(1);
		String bookName = book.element("书名").getText();
		String bookAttr = book.element("书名").attributeValue("name");
		System.out.println("bookName: " + bookName);
		System.out.println("bookAttr: " + bookAttr);
		
		//添加售价节点
		book.addAttribute("memony", "有优惠价");
		book.addElement("优惠价").setText("8折");
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("UTF-8");
		XMLWriter writer = new XMLWriter(
				new OutputStreamWriter(new FileOutputStream("src/book1.xml")), format);
		writer.write(document);
		writer.close();		
	}

	//指定位置添加
		@Test
		public void test2() throws DocumentException, IOException {
			SAXReader reader = new SAXReader();
			Document document = reader.read(new File("src/book1.xml"));
			Element book =  document.getRootElement().element("书");
			List list = book.elements();
			
			Element price = DocumentHelper.createElement("打折价");
			price.setText("9.9折");
			list.add(2, price);
			
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("UTF-8");
			XMLWriter writer = new XMLWriter(
					new OutputStreamWriter(new FileOutputStream("src/book1.xml")), format);
			writer.write(document);
			writer.close();						
		}
		
		//删除节点  更新节点
		@Test
		public void test3() throws DocumentException, IOException {
			SAXReader reader = new SAXReader();
			Document document = reader.read(new File("src/book1.xml"));
			Element priceTmp =  document.getRootElement().element("书").element("打折价");
			//删除节点
			priceTmp.getParent().remove(priceTmp);
			
			Element price =  document.getRootElement().element("书").element("售价");
			//更新节点
			price.setText("只要998");
										
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("UTF-8");
			XMLWriter writer = new XMLWriter(
					new OutputStreamWriter(new FileOutputStream("src/book1.xml")), format);
			writer.write(document);
			writer.close();			
		}
				
}

posted @ 2013-11-28 10:48  今晚打酱油_  阅读(539)  评论(0编辑  收藏  举报