参考文章:http://inotgaoshou.iteye.com/blog/1012188
一、xml解析常用的四种方式:
DOM(Document Object Model)文档对象模型;
SAX(Simple APIs for XML)XML简单应用程序接口;
JDOM(java-based Document Object Model);
DOM4J(Document Object Model for Java);
================================================================================
推荐用dom4j(大文档,或xml文档较多时候) 和 dom (小文档,xml文档较少的时候)
================================================================================
参考文章:http://download.csdn.net/download/shizhending/4067649
二、四种方式的比较:
DOM:性能测试时表现不佳 .W3C的官方标准,允许应用程序对数据和结构做出更改,允许获取和操作文档的任意部分,
但需要加载整个文档,性能差,占内存多, 小文件可以,据说超10M才溢出
由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。
SAX:性能表现较好.类似于流媒体特点,分析能够立即开始,而不是等待所有的数据被处理。
只在读取数据时检查数据,不需要保存在内存中。可以在某个条件得到满足时停止解析,
不必解析整个文档。效率和性能较高,能解析大于系统内存的文档。
很难同时访问同一个文档中的多处不同数据 ,对内存的要求通常会比较低,
适用于大型文档。
DOM4j:DOM4J性能最好,DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,
同时它也是一个开放源代码的软件。
JDOM:性能测试时表现不佳 , JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。
三、使用举例
1.dom4j:
src/person.xml
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="psn0001" >
<name>gavin</name>
<age>18</age>
<address>
<country>中国</country>
<province>北京</province>
<city>北京</city>
</address>
<zipcode>100000</zipcode>
</person>
<person2 id="psn0002" >
<name>sophia</name>
<age>18</age>
<address>
<country>中国</country>
<province>钓鱼岛</province>
<city>钓鱼岛</city>
</address>
<zipcode>100000</zipcode>
</person2>
</persons>
dom4j读取:
package com.gavin.xmlparse.dom4j;
import java.io.File;
import java.io.InputStream;
import java.io.Reader;
import java.net.URL;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.DOMReader;
import org.dom4j.io.SAXReader;
import org.xml.sax.InputSource;
/**
* 用dom4j读取xml信息
* @author gavin
*/
public class ParseXml {
/**
* dom4j object model representation of a xml document. Note: We use the
* interface(!) not its implementation
*/
private Document doc;
/**
* Loads a document from a file.
* @param aFile the data source
* @throw a org.dom4j.DocumentExcepiton occurs on parsing failure.
*/
public void parseWithSAX(File aFile) throws DocumentException {
SAXReader xmlReader = new SAXReader();
this.doc = xmlReader.read(aFile);
}
/**
* Loads a document from a file.
*
* @param aURL
* the data source
* @throw a org.dom4j.DocumentExcepiton occurs on parsing failure.
*/
public void parseWithSAX(URL aURL) throws DocumentException {
SAXReader xmlReader = new SAXReader();
this.doc = xmlReader.read(aURL);
}
/**
* Reads a Document from the given InputSource using SAX
* @param inputSource
* @throws DocumentException
*/
public void parseWithSAX(InputSource inputSource) throws DocumentException {
SAXReader xmlReader = new SAXReader();
this.doc = xmlReader.read(inputSource);
}
/**
* Reads a Document from the given stream using SAX
* @param in
* @throws DocumentException
*/
public void parseWithSAX(InputStream in) throws DocumentException {
SAXReader xmlReader = new SAXReader();
this.doc = xmlReader.read(in);
}
/**
* Reads a Document from the given stream using SAX
* @param in
* @param systemId
* @throws DocumentException
*/
public void parseWithSAX(InputStream in, String systemId) throws DocumentException {
SAXReader xmlReader = new SAXReader();
this.doc = xmlReader.read(in,systemId);
}
/**
* Reads a Document from the given Reader using SAX
* @param reader
* @throws DocumentException
*/
public void parseWithSAX(Reader reader) throws DocumentException {
SAXReader xmlReader = new SAXReader();
this.doc = xmlReader.read(reader);
}
/**
* Reads a Document from the given URL or filename using SAX.
* @param systemId
* @throws DocumentException
*/
public void parseWithSAX(String systemId) throws DocumentException {
SAXReader xmlReader = new SAXReader();
this.doc = xmlReader.read(systemId);
}
/**
* converts a W3C DOM document into a dom4j document
* @param doc
*/
public void parseW3CDom2Dom4j(org.w3c.dom.Document doc){
DOMReader domReader = new DOMReader();
this.doc = domReader.read(doc);
}
public Document getDoc() {
return doc;
}
/**
* 利用xpath读取属性值
* @param xpathExpression
* @return
*/
public String getAttributeValue(String xpathExpression){
Node node = doc.selectSingleNode(xpathExpression);
if(node == null){
return null;
}
return node.valueOf("@id");
}
/**
* 利用xpath读取某元素的值
* @param xpathExpression
* @return
*/
public String getElementValue(String xpathExpression){
Node node = doc.selectSingleNode(xpathExpression);
if(node == null){
return null;
}
return node.getText();
}
public static void main(String[] args) throws DocumentException {
ParseXml parser = new ParseXml();
File file = new File("D:\\workspace\\javaCoreSkill\\src\\person.xml");
if(!file.exists()){
return;
}
parser.parseWithSAX(file);
Document document = parser.getDoc();
Element root = document.getRootElement();
// iterate through child elements of root
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
String psnId = element.attributeValue("id");
System.out.println(psnId);
// iterate through attributes of root
for ( Iterator iter = element.attributeIterator(); iter.hasNext(); ) {
Attribute attribute = (Attribute) iter.next();
System.out.println(attribute.getValue());
}
}
// iterate through child elements of root with element name "person"
for ( Iterator i = root.elementIterator( "person" ); i.hasNext(); ) {
Element person = (Element) i.next();
String psnId = person.attributeValue("id");
System.out.println(psnId);
for(Iterator i2 = person.elementIterator(); i2.hasNext();){
Element el = (Element) i2.next();
if(el.isTextOnly()){
System.out.println(el.getName() + ":" +el.getText());
}else{
Node node1 = document.selectSingleNode( "/persons/person/address/country" );
Node node2 = document.selectSingleNode( "/persons/person/address/city" );
Node node3 = document.selectSingleNode( "/persons/person/address/province" );
String country = node1.getText();
String province = node2.getText();
String city = node3.getText();
System.out.println("country:"+country+"province:"+province+"city:"+city);
}
}
}
System.out.println("person2元素的id属性值为:"+parser.getAttributeValue("//person2"));
System.out.println("person2元素的id属性值为:"+parser.getElementValue("//person2/address/province"));
}
}
参考文档:
xpath tutorial
w3cschool
待续..........
分享到:
相关推荐
它的简单API使得XML读写任务变得轻而易举,而且由于其小巧的体积,使得它成为嵌入式系统和资源有限环境的理想选择。在实际开发中,结合XML的灵活性和TinyXML的易用性,可以有效地实现数据持久化和跨平台的数据交换。
本文将深入探讨“XML读写帮助类”的相关知识点,包括XML的基本结构、解析方式、读写操作以及如何创建一个实用的Java XML助手类。 1. XML基本结构: - 元素(Element):XML文档的核心,如`<book>`,元素可以包含...
标题中的"C# 服务 多线程 XML读写"涵盖了几个关键的编程概念,下面将分别详细介绍这些知识点。 首先,让我们来谈谈"C#"。C#是微软开发的一种面向对象的编程语言,它广泛用于构建Windows应用程序、Web应用程序、游戏...
下面将详细阐述DOM模型、解析过程以及如何在Java中使用DOM进行XML读写。 DOM模型的核心概念是节点(Node)。XML文档的每个部分——元素(Element)、属性(Attribute)、文本(Text)等都被表示为一个节点对象。DOM...
在本文中,我们将深入探讨如何使用 TinyXML 来读写 XML 文件,以及它在 Visual C++ 开发环境中的应用。 1. **TinyXML 的基本结构** TinyXML 提供了一系列类来表示 XML 文档的不同部分,如 `TiXmlDocument`(XML ...
本人没分了,特别来分享一下,通用的XML读写工具类,同志们下下绝对不后悔
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它以其结构化、可扩展性和易于解析的特点广泛应用于各种软件开发中,包括...通过熟练掌握C#中的XML读写技术,可以有效提升开发效率和代码质量。
XML读写配置文件类封装
一点心得分享给大家,简单的XML读写类,方便的开发应用程序
自己写的c#下的xml读写函数,希望能给新手带来帮助
另外,Java标准库中的javax.xml.parsers和org.w3c.dom包也提供了基本的XML读写支持。 在实际开发中,XML常用于配置文件、数据交换、SOAP(Simple Object Access Protocol)服务等场景。例如,Spring框架大量使用XML...
【JSP实现对XML读写】是Web开发中的一项重要技能,它结合了JSP(Java Server Pages)和XML(可扩展标记语言)的优势,使开发者能更灵活地处理和存储数据。XML作为一种通用的数据交换格式,具有自描述性和结构化特点...
2. **流式读写器**:如`XmlReader`和`XmlWriter`,它们提供了快速读写XML文档的能力,适用于大数据量的处理,因为它们不将整个文档加载到内存中。 3. **验证读写器**:如`XmlValidatingReader`和`...
XML(eXtensible Markup Language)是一种用于...对于初学者,建议先从简单的XML读写开始,逐步掌握更复杂的功能,如XPath查询、XSLT转换等。同时,理解XML的结构和语法规则是进行操作的基础,务必确保XML的合法性。
本示例提供了一个VC++实现的XML读写操作,通过类`VC_CXmlFile`来简化这一过程,增强了代码的可读性和易用性。 在`VC_CXmlFile.sln`中,这是一个Visual Studio的解决方案文件,包含了项目的配置信息和项目依赖。打开...
本篇文章将详细介绍如何在VC++项目中集成和使用TinyXML库来读写XML文件。 首先,你需要将TinyXML库的源代码文件添加到你的工程中。"TinyXml"压缩包中通常包含了以下几个主要文件: 1. `tinyxml.h` - 这是TinyXML的...
首先,XML读写涉及到两个主要的类:`XmlReader`和`XmlWriter`。`XmlReader`提供了一个高效的、只进的、非缓存的读取器,用于解析XML文档。`XmlWriter`则是一个用于创建XML文档的抽象类,可以用来构建新的XML结构或者...
总之,这个"TinyXML读写XML实例"通过结合MFC的图形用户界面和TinyXML的XML处理能力,提供了一个直观的、简单的学习XML读写的方法。它可以帮助开发者快速理解和应用XML数据处理技术,从而在实际项目中更有效地管理...
标题 "pb的xml读写例子" 涉及到的是使用PowerBuilder(PB)这一编程工具处理XML文件的实践操作。PowerBuilder是一款流行的面向对象的集成开发环境(IDE),尤其适用于构建数据库应用。XML(eXtensible Markup ...