Java中对xml的解析

Java中对xml的解析

1.Dom4j

Dom解析原理:xml解析器一次性将xml文档加载到内存中,然后在内存中构建一颗Document对象树。在通过Document对象得到树上的节点对象,通过节点对象操作文档内容。

Dom4J 常用的对象:

SAXReader:读取 xml 文件到 Document 树结构文件对象

Document:是一个 xml 文档对象树,类比 Html 文档对象。

Element:元素节点。通过 Document 对象可以查找单个元素

使用步骤:


( 导入 Dom4J.jar 包 dom4j-1.6.1.jar )

1.创建SaxReader解析器

SAXReader Reader = new SAXReader();

2.通过read方法获得Document对象

Document document = Reader.read("conf/student.xml");
3.获得根节点

Element rootEle = document.getRootElement();

4.4.通过迭代器遍历xml文档

Iterator it = rootEle.elementIterator();

while (it.hasNext()) {

Element stusEle = (Element) it.next();

Iterator it01 = stusEle.elementIterator();

while (it01.hasNext()) {

Element stuEle = (Element) it01.next();

System.out.println(stuEle.getStringValue());

}

System.out.println("--------------------------------");

}

Dom4j官方文档中有quick start 可以帮助我们快速使用该技术!

2.SAX

Sax解析工具是sun公司提供的,内至于jdk中。Org.xml.sax.*;

sax解析原理:事件驱动,边读边写

当遇到开始标签时,自动调用startElement(String url,String localName,String qname,Attribute attribute)方法;当遇到文本时,自动执行characters(char[]ch,int start,int length);当遇到结束标签时自动执行endElement(String url,String localName,String qName)方法。

<结束标签以’/’作为标志,结束方法比开始方法只少一个attribute 参数>

使用步骤:


1.创建解析工厂

//SAXParserFactory 构造方法被保护,只能通过 .newInstance()方法创建实例

SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();

2.创建解析器

//通过工厂创建解析器

SAXParser saxParser = saxParserFactory.newSAXParser();

3.执行parser方法

// 执行 parser 方法,传入两个参数:xml 文件路径、事件处理器

saxParser.parse("conf/student.xml", new MyDefaultHandler());

所谓事件处理器是指 一个继承与 DefaultHandler 的类,进行重写其中的startElement()、characters()、endElement()方法实现相应的处理。

创建一个类,继承 DefaultHander 类,重写三个方法:

A、 startElement 获取开始标签,重要的两个参数说明

a、 qName:把标签名称返回

b、 attributes:返回标签中的属性对象

B、 character  获取标签文本内容

C、 endElement  获取结束标签

============DOM解析    vs   SAX解析 ========


DOM解析


SAX解析


原理: 一次性加载xml文档,不适合大容量的文件读取


原理: 加载一点,读取一点,处理一点。适合大容量文件的读取


DOM解析可以任意进行增删改成


SAX解析只能读取


DOM解析任意读取任何位置的数据,甚至往回读


SAX解析只能从上往下,按顺序读取,不能往回读


DOM解析面向对象的编程方法(Node,Element,Attribute),Java开发者编码比较简单。


SAX解析基于事件的编程方法。java开发编码相对复杂。

3.XPath

主要是用于快速获取所需的节点对象。

选择节点:XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着

路径或者 step 来选取的。下面列出了最有用的路径表达式:

表达式 描述

nodename  选取此节点的所有子节点。

/  从根节点选取。

//      从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

.  选取当前节点。

..  选取当前节点的父节点。

@  选取属性。

text()获取节点的文本内容函数

使用步骤:


// 1.通过DocumentBuilderFactor创建解析工厂

DocumentBuilderFactory builderFactory = DocumentBuilderFactory

.newInstance();

// 2.通过工厂获得解析器

DocumentBuilder builder = builderFactory.newDocumentBuilder();

// 3.通过parser方法获取Document

Document document = builder.parse("conf/books.xml");

// 4.获取xpath对象

XPath xpath = XPathFactory.newInstance().newXPath();

// 5.获取 bookstore 节点下 book 属性 category 值为 web 下的第二个title 节点的文本内容

String exp = "/bookstore/book[@category=‘web‘][2]/title/text()";

String tit = (String) xpath.evaluate(exp, document,

XPathConstants.STRING);

System.out.println(tit);

// 获取 bookstore 节点下 book 属性 category 值为 web 的 titile 属性为 en 的节点内容

String expEn = "/bookstore/book[@category=‘web‘]/title[@lang =‘en‘]/text()";

String titEN = (String) xpath.evaluate(expEn, document,

XPathConstants.STRING);

System.out.println(titEN);

// 获取 bookstore 下 book 属性 category 值为 cooking 的 title 的 lang 属性的值

String expLan = "/bookstore/book[@category=‘cooking‘]/title/@lang";

String lang = (String) xpath.evaluate(expLan, document,

XPathConstants.STRING);

System.out.println(lang);


// 获取 bookstore 节点下所有 book 的节点集合(遍历该文档)

String expB = "/bookstore/book";

NodeList books =(NodeList) xpath.evaluate(expB, document, XPathConstants.NODESET);

for (int i = 0; i < books.getLength(); i++) {

Element book =(Element) books.item(i);

String title =(String) xpath.evaluate("title/text()", book, XPathConstants.STRING);

String author =(String) xpath.evaluate("author/text()", book, XPathConstants.STRING);

String year =(String) xpath.evaluate("year", book, XPathConstants.STRING);

String price =(String) xpath.evaluate("price", book, XPathConstants.STRING);

System.out.println(title+" "+author+" "+year+" "+price);

System.out.println("----------------------------------------------------");

}

4.在Dom4j中使用XPath

开发中Dom4j和XPath结合使用非常灵活,所以应用广泛!

使用步骤:


1)导入xPath支持jar包 。  jaxen-1.1-beta-6.jar

2)使用xpath方法

List<Node>  selectNodes("xpath表达式");   查询多个节点对象

Node       selectSingleNode("xpath表达式");  查询一个节点对象


//1.SAXReader解析器

SAXReader reader = new SAXReader();

//2.通过read方法获得Document

Document document =reader.read("conf/bookstore.xml");

//3.xpath路劲

String titlePath ="/bookstore/book[1]/title";

Element element  =(Element) document.selectObject(titlePath);

String title =element.getStringValue();

System.out.println(title);

时间: 2024-12-28 14:02:57

Java中对xml的解析的相关文章

【转】Java中的static关键字解析

Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “static方法就是没有thi

Java中的static关键字解析 转载

原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字, 也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关 于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试

【JAVA学习笔记】Java中的static关键字解析

Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 若有不正之处,希望谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnb

Java中的static关键字解析(转自海子)__为什么main方法必须是static的,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。

Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 若有不正之处,希望谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnb

【转载-Java基础】Java中的static关键字解析

[转载]Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 若有不正之处,希望谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接:http://www.

java中的xml简介与DOM解析xml

1. xml简介 XML:指可扩展标记语言, Extensible Markup Language:类似HTML.XML的设计宗旨是传输数据,而非显示数据. 一个xml文档实例: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <company name="Tencent" address="深圳市南山区"> 3 <department deptNo=&quo

Java中对XML文件的校验

Java中使用dtd校验xml文件: 1.定义一个校验类CheckXML类: import org.w3c.dom.Document; import org.xml.sax.EntityResolver;import org.xml.sax.ErrorHandler;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.SAXParseException; import java.io.

Java中的访问权限解析

在Java中不同的对象和类拥有不同的访问权限,所以在java中对不同的类和对象进行权限的设置显得尤为重要. java中的权限主要分为四种,public,protect,private,和default在声明类和对象的时候如果没有注明权限则为默认的即(default).下面将对这四种权限仅向简单的解析,部分为网上博主的总结再加上个人总结 1.权限解析Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符.private:

Jpa规范中persistence.xml 配置文件解析

数据库已经配好的前提下 persistence.xml配置如下 <?xml version="1.0" encoding="UTF-8" standalone="no"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&q