一、前言
用Java解析XML文档,最基本的有两种方法:
1.使用基于事件的XML简单API(Simple API for XML)称为SAX
2.基于树和节点的文档对象模型(Document Object Module)称为DOM。
Sun公司提供了Java API for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的XML解析器。
JAXP接口包含了三个包:
(1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口。
(2)org.xml.sax 用于对XML进行语法分析的事件驱动的XML简单API(SAX)
(3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。
二、比较
1、 DOM 解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用 DOM 解析器的时候需要处理整个 XML 文档,所以对性能和内存的要求比较高,尤其是遇到很大的 XML 文件的时候。由于它的遍历能力,DOM 解析器常用于 XML 文档需要频繁的改变的服务中。
2、 SAX 解析 XML 文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX 对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现。但用 SAX 解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。
三、使用DOM解析XML文档
DOM编程不要其它的依赖包,因为JDK里自带的JDK里含有的上面提到的org.w3c.dom、org.xml.sax 和javax.xml.parsers包就可以满意条件了。
<?xml version="1.0" encoding="UTF-8"?>
<people>
<person>
<name>蒋中正</name>
<sex>male</sex>
<age>25</age>
</person>
<person>
<name>毛润之</name>
<sex>female</sex>
<age>22</age>
</person>
<person>
<name>孙中山</name>
<sex>male</sex>
<age>28</age>
</person>
</people>
解析XML代码如下:
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
/***
* DOM解析
* */
public class XmlParsing {
public XmlParsing(){
//1、获得DOM解析器的工厂实例------工厂实例
DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();
try {
//2、从DOM工厂获得DOM解析器------dom解析器
DocumentBuilder dombuilder = domfac.newDocumentBuilder();
//3、把要解析的XML文档转化为输入流,以便DOM解析器解析它
InputStream in = XmlParsing.class.getClassLoader().getResourceAsStream("people.xml");
//4、解析XML文档的输入流,得到一个Document
Document doc = dombuilder.parse(in);
//5、得到XML文档的根节点
Element root = doc.getDocumentElement();
//6、得到节点的子节点
NodeList persons = root.getChildNodes();
for(int i=0;i<persons.getLength();i++){
Node person = persons.item(i);
//获得节点的属性值
if(person.getNodeType()==Node.ELEMENT_NODE){
String id = person.getAttributes().getNamedItem("id").getNodeValue();
System.out.print("编号:"+id);
}
for(Node node = person.getFirstChild();node!=null;node = node.getNextSibling()){
//DOM把<name>蒋中正</name>也当作是两层结构的节点,其父节点是<name>,
//子节"蒋中正" 记才是我们真正想得到的
// System.out.println(node.getNodeValue());//**Output**: NULL ,
if(node.getNodeType()==Node.ELEMENT_NODE){
if(node.getNodeName().equals("name")){
System.out.println(" 姓名:"+node.getFirstChild().getNodeValue());
}
}
}
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
import java.io.InputStream;
import java.util.Iterator;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
public class Dom4jParsing {
@SuppressWarnings("unchecked")
public static void parseXml(String rootName,String id){
//把要解析的XML文档转化为输入流,以便DOM解析器解析它
InputStream in = Dom4jParsing.class.getClassLoader().getResourceAsStream("people.xml");
//获取SAX解析器
SAXReader reader = new SAXReader();
try {
//解析文档输入流,得到一个doc文档
Document doc = reader.read(in);
Element root = doc.getRootElement();
for(Iterator<Element> iter = root.elementIterator();iter.hasNext();){
//获得根元素下的字根元素
Element e = iter.next();
//获得节点的属性值
System.out.println("编号:"+e.attributeValue(id));
if(e.getName()==rootName){
//当前节点下的子节点
for(Iterator<Element> iter1 = e.elementIterator();iter1.hasNext();){
System.out.println(iter1.next().getText());
}
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Dom4jParsing.parseXml("person","id");
}
}
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。
分享到:
相关推荐
易语言XML解析是编程领域中的一个重要主题,尤其对于使用易语言进行开发的程序员来说,理解并掌握XML(可扩展标记语言)的解析方法是至关重要的。XML作为一种结构化数据存储和交换格式,广泛应用于网络通信、配置...
java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析...
根据给定文件中的标题、描述、标签以及部分内容,可以总结并深入探讨以下关于C#中XML解析的关键知识点: ### C#中的XML解析方式 #### 1. XML Text Reader(流式解析) - **简介**:在.NET框架中,`XMLTextReader`...
在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)这个强大的图形化编程环境中,XML解析器是处理和操作XML数据的关键工具。本示例主要展示了如何在LabVIEW中实现XML文件的加载、保存和解析。 首先...
本文将详细介绍XML解析文件的两种主要方式:SAX(Simple API for XML)和DOM(Document Object Model)。 **1. DOM解析** DOM解析方式是将整个XML文档加载到内存中,构建一个树形结构,称为DOM树。这个树的每个...
本文将深入探讨XML解析和生成工具的相关知识,以及如何利用提供的`Markup.cpp`和`Markup.h`文件进行操作。 XML的结构: XML文档由一系列元素构成,每个元素都有一个开始标签和结束标签,如 `<tag>` 和 `</tag>`。...
在Java中,XML解析有四种主要的方法:DOM、SAX、JDOM和DOM4J。 1. DOM(文档对象模型)是W3C推荐的标准,它将XML文档转换为一棵树形结构,允许开发者通过节点遍历和操作XML内容。DOM的优势在于它提供了一种灵活的...
本教程将介绍如何在iOS应用中实现简单的XML解析,并提供了一个名为"UITableViewTricks"的DEMO,供开发者们参考学习。 XML文件结构清晰,易于理解,但在iOS中解析XML数据并非内置功能,需要借助第三方库或者Apple...
MusicXML是一种开放标准的音乐符号交换格式,它允许数字音乐...总之,"MusicXML解析与布局"项目涵盖了XML解析、数据结构设计、图形渲染、音乐理论等多个方面的知识,对于深入理解音乐和计算机科学的结合具有重要意义。
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。 TinyXML是一个开源的解析XML的解析库,能够用于C++,...
在嵌入式系统中,由于资源限制,往往需要轻量级且高效的XML解析器。"minixml"就是这样一个专为嵌入式系统设计的开源XML解析器,它提供DOM(Document Object Model)支持,使得开发者能够方便地处理XML文档。 mini...
Java XML解析是Java开发中的一项重要技能,尤其是在处理结构化数据时。XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于配置文件、数据交换和文档存储等领域。本压缩包“java心电图xml解析....
XML解析支持库则是用于处理XML文档的核心工具,它们帮助开发者有效地读取、解析、创建和操作XML数据。 在Java开发中,常见的XML解析库有DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming...
本文将深入探讨XML解析器的工作原理,并通过具体的代码示例帮助你理解和掌握XML解析的基本方法。 XML文档结构由元素、属性、文本内容、注释等构成。元素是XML文档的核心,它们用尖括号包围,如 `<element>`。属性...
《C语言实现的libxml2-2.9.8 XML解析器详解》 XML(Extensible Markup Language)是一种用于标记数据的语言,广泛应用于网络数据交换、配置文件存储等领域。在IT行业中,C语言由于其高效、灵活的特点,常被用来编写...
XML解析技术是XML应用的核心,它涉及将XML文档转换为可处理的结构化数据。XML,全称为eXtensible Markup Language,是一种元语言,用于描述结构化数据,独立于编程语言、操作系统和传输协议。W3C联盟自1996年开始...
理解和熟练使用XML解析器是任何IT专业人士的必备技能之一,无论是在移动应用、Web服务还是桌面应用程序中,XML解析都发挥着关键作用。了解和掌握TinyXML这样的解析库,可以帮助开发者更高效地处理XML数据。
XML解析器是处理XML文档的核心组件,它能够读取XML文件并将其内容转换为程序可以理解的形式。在Java环境中,XML解析器通常以JAR(Java Archive)文件的形式提供,方便开发者集成到项目中。 "XML解析器下载JAR包"这...
XML解析方式是一种高效且灵活的方法,能够帮助我们实现这一目标。本篇文章将详细探讨如何利用Java和XML解析来自动化创建Word文档。 首先,我们需要了解XML的结构。XML(Extensible Markup Language)是一种标记语言...
4. XML解析技术在Visio图数据交互中的具体应用:本文提出了一种新的方法,它利用成熟的XML解析技术来实现Visio图与应用程序间的数据交互。首先,需要将Visio图转换成XML格式的.vdx文件;其次,设计并实现一个解析...