首页 > 代码库 > xml解析-dom4j(比较流行,第三方提供)

xml解析-dom4j(比较流行,第三方提供)

需要导入dom4j的包,以提供dom4j的支持。

package day06_parser.dom4j;
/**dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的
DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义:

Dom4j is an easy to use, open source library for working with 
XML, XPath and XSLT on the Java platform using the Java Collections Framework
and with full support for DOM, SAX and JAXP.

Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。
它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
在java的基本api中常用的解析xml的方式是Jaxp解析的DOM,SAX两种方式。

可以这样理解:dom4j是第三方为java实现的xml的解析方式。
=====================================================
XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)
文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

dom4j的依赖包中提供了xpath的方式来寻找文档中的节点。
下面的实例:
dom4j的sax方式的解析。
 * @author Leon
 */
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.beanutils.BeanUtils;
import org.dom4j.Document;
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 day06_parser.domain.Book;

public class TestDom4j {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		demo03();
	}
	//获取document
	public static void demo01() throws Exception{

		//1.dom4j方式获取xml的解析器
		SAXReader saxReader=new SAXReader();
		//2. 从文件读取XML,输入文件名,返回XML文档
		Document document =saxReader.read(new File("db.xml"));
		System.out.println(document);
	}
	//增加-创建新的元素
	public static void demo02() throws Exception{

		//1.dom4j方式获取xml的解析器
		SAXReader saxReader=new SAXReader();
		//2. 从文件读取XML,输入文件名,返回XML文档
		Document document =saxReader.read(new File("db.xml"));
		//必须获得根元素
		Element rootElement=document.getRootElement();
		//创建新的元素
		Element newbookElement=DocumentHelper.createElement("book");
		//添加属性
		newbookElement.addAttribute("id", "b004");
		newbookElement.addElement("title").setText("javaee技术学习");
		//添加关系
		rootElement.add(newbookElement);
		//==========将做过修改的document对象回写到xml文件中===============
		FileOutputStream out = new FileOutputStream(new File("db.xml"));
		//4 回写
		XMLWriter xmlWriter = new XMLWriter(out,OutputFormat.createPrettyPrint());	//准备往哪里写?
		xmlWriter.write(document);				//写的是什么
		xmlWriter.close();
		System.out.println("写入完成");		
	}
	//删除元素两种方式:1.根据更元素,遍历,符合条件的做删除2.xpath方式直接获取某个元素
	public static void demo03() throws Exception{

		//1.dom4j方式获取xml的解析器
		SAXReader saxReader=new SAXReader();
		//2. 从文件读取XML,输入文件名,返回XML文档
		Document document =saxReader.read(new File("db.xml"));
		//获取根元素
		Element rootElement=document.getRootElement();
		//用第二种方式删除元素-xpath
		String id="b004";
		Node toDeleteNode=document.selectSingleNode("/books/book[@id=‘"+id+"‘]");//注意此处字符串的拼接
		//进行删除操作,思想还是一样,由自己找到父节点,由父节点再删除自己
		toDeleteNode.getParent().remove(toDeleteNode);
		//回写
		//目的地-----文件字符输出流
		FileOutputStream out=new FileOutputStream(new File("db.xml"));
		XMLWriter xmlWriter=new XMLWriter(out,OutputFormat.createPrettyPrint() );
		xmlWriter.write(document);
		xmlWriter.close();
		System.out.println("回写完成");			
	}
	
	//遍历xml将book元素以javabean的方式存储。同时这里面使用BeanUtils工具类
	public static void demo04() throws Exception{

		// 遍历 --封装到javabean
		List<Book> allBookBean = new ArrayList<Book>();
		//1 获得document
		SAXReader saxReader = new SAXReader();
		Document document = saxReader.read(new File("db.xml"));
		//2必须从根元素
		Element rootElement = document.getRootElement();
		//3获得所有的book元素
		List<Element> allBookList = rootElement.elements("book");
		//4遍历
		for(Element bookElement: allBookList){
			/**#1 创建javabean对象*/
			Book book = new Book();
			allBookBean.add(book);
			// 4.1 id属性
			String id = bookElement.attributeValue("id");
			book.setId(id);
			// 4.2 获得所有的子元素
			List<Element> allChildList = bookElement.elements();
			// 4.3 遍历
			for (Element childElement : allChildList) {
				String name = childElement.getName();
				String value = http://www.mamicode.com/childElement.getText();>