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());
			}
		}
	}
}

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

时间: 2024-10-22 06:05:17

xml解析-dom4j(比较流行,第三方提供)的相关文章

XML系列:(6)XML解析-Dom4j的DOM解析方式读取XML

Dom4j工具,是非官方的,不在jdk中. 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件的代码 animals.xml <?xml version="1.0" encoding="UTF-8"?> <Animals> <Cat id="c001" name="喵喵"> <Home>火星</Home> <

XML系列:(7)XML解析-Dom4j的DOM解析方式更新XML

Dom4j工具,是非官方的,不在jdk中. 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件的代码 1.更新XML 1.1.写出内容到xml文档 package com.rk.xml.g_dom4j_write; import java.io.File; import java.io.FileOutputStream; import org.dom4j.Document; import org.dom4j.io.SAXReader; im

XML系列:(8)XML解析-Dom4j的xPath技术

1.xPath技术 问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! xPath作用:主要是用于快速获取所需的节点对象. 1.1.在dom4j中如何使用xPath技术 1)导入xPath支持jar包 .  jaxen-1.1-beta-6.jar(这个jar包在dom4j的压缩包中,位置:dom4j-1.6.1\lib\jaxen-1.1-beta-6.jar) 2)使用xpath方法 List selectNodes("xpath表达式");  

XML解析器

一.操作XML文档概述 1.如何操作XML文档 XML文档也是数据的一种,对数据的操作也不外乎是"增删改查".也被大家称之为"CRUD" C:Create: R:Retrieve: U:Update: D:Delete 2.XML解析技术 XML解析方式分为两种:DOM(Document Object Model)和SAX(Simple API for XML).这两种方式不是针对Java语言来解析XML的技术,而是跨语言的解析方式.例如DOM还在Javascrip

java基础篇---XML解析(二)

XML解析之最流行的方式:DOM4J dom4j是使用java语言编写的,用于读,写,操作XML的一套组件 JDOM=DOM修改文件的优点+SAX读取快速的优点 dom4j是一个开源的java组件,可从http://sourceforge.net/projects/dom4j/files/下载.其解压后有一个dom4j-1.6.1.jar文件,这个就是需要引入的包,其dom4j的所有的接口都在org.dom4j包中定义,主要接口如下: XML写入文件:DOM4JWriter.java packa

IOS学习:常用第三方库(GDataXMLNode:xml解析库)

IOS学习:常用第三方库(GDataXMLNode:xml解析库) 分类: ios开发学习2013-05-30 09:45 4443人阅读 评论(0) 收藏 举报 iOSXMLGDataXMLNode 一.GDataXMLNode说明 GDataXMLNode是Google提供的用于XML数据处理的类集.该类集对libxml2--DOM处理方式进行了封装,能对较小或中等的xml文档进行读写操作且支持XPath语法. 使用方法: 1.获取GDataXMLNode.h/m文件,将GDataXMLNo

Java xml 操作(Dom4J修改xml &#160;&#160;+ xPath技术 &#160;+ SAX解析 + XML约束)

1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大小写.有且仅有一个根标签. 属性: 可有多个属性,但属性值必须用引号(单引号或双引号)包含,但不能省略,也不能单 双混用. 文档声明: <?xml version="1.0" encoding="utf-8"?> encoding="utf-8&q

xml之dom4j解析

* 使用dom4j解析xml 实例在java520里面 TextDom4j * dom4j,是一个组织,针对xml解析,提供解析器dom4j * dom4j不是javase的一部分,想要使用第一步需要怎么做 - 导入dom4j提供jar包 - 常见一个文件夹lib - 复制jar包到lib下面 - 邮件点击jar包.builb path -- add to bulildpath - 看到jar包变成奶瓶装 表示导入成功 * 得到document使用 * SAXReader reader = ne

XML解析器之JAXP与DOM4J

XML是一种数据格式,那么需要对XML文件进行操作就需要用到XML解析器---------针对dom方式和sax方式提供了不同的解析技术-----需要不同的XML解析器 dom方式:会把文档中所有元素(标签),根据xml的层级结构,解析成各个Node对象(节点).在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象 缺点:如果文件过大,造成内存溢出. 优点:树结构,容易遍历和实现增删改. sax方式:采用事件驱动,边读边解析,解析到某一个对象,返回对象名称,可以由用户自己建立自己的对