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 = childElement.getText();
				BeanUtils.setProperty(book,name,value); //使用工具进行javabean数据封装
			}
		}
		
		//输出
		for (Book book : allBookBean) {
			System.out.println(book);
		}
		
		
	}
	//查询的第二种方式
	public static void demo05_1() throws Exception{
		//获取document
		SAXReader saxReader=new SAXReader();
		Document document =saxReader.read(new File("db.xml"));
		//2 使用xpath进行查询
		//document.selectNodes("表达式"),查询xpath表达式指定的所有节点
		Node bookNode = document.selectSingleNode("/books/book[@id='b001']");	//查询单个
		System.out.println(bookNode);
		//Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
		/*
		 * 如果直接这样用的话,会报上述错误,因为缺少依赖包了。可以dom4j.zip的lib文件下找到这个依赖包,添加即可
		 */
	}
	//查询
	public static void demo05() throws Exception{

		//获取document-------dom4j sax方式解析的核心
		SAXReader saxReader=new SAXReader();
		Document document =saxReader.read(new File("db.xml"));
		//获取根元素---注意dom4j必须获取根元素进行操作
		Element rootElement=document.getRootElement();//---books(db.xml)
		//获取所有的book元素
		List<Element> elements=rootElement.elements();//---book(db.xml)
		//遍历元素
		for (Element element : elements) {
			System.out.println(element.getName());
			String id=element.attributeValue("id");
			System.out.println("###id:"+id);
			List<Element> childeElements=element.elements();
			for (Element element2 : childeElements) {
				System.out.print(element2.getName()+":");
				System.out.println(element2.getTextTrim());
			}
		}
	}
}
原文链接:https://www.f2er.com/xml/298665.html

猜你在找的XML相关文章