开篇博客,写个简单点的。。。。就写下xml的解析吧
我们所常见的用java解析xml的方式有两种——SAX方式和DOM方式,这两种方式的特点分别如下:
SAX方式:SAX处理器会从头到尾将xml文档扫描一遍,每当处理器遇到一个语法结构时,它就会调用这个特定语法结构的事件处理程序向应用程序发送一个事件。相关的语法结构会自动包括开始标签、属性、文本和结束标签。它的优点是,分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。
DOM方式:DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。
DOM相对于SAX的优势有:1.当文档的某一部分需要被应用程序多次访问时,DOM表示具有明显的优势;2.当应用程序需要对文档进行调整时,如果能一次性的访问整个文档,显然要快点;3.DOM方式可以随机访问文档中的某个部分;4.由于解析器在进行处理之前能看到整个文档,因此这种方式可以根据相应的DTD或XML架构的规定来避免无效操作。
SAX方式相对于DOM的优点在于,DOM结构时完全存储在内存中的,若文档比较大,则很占用内存,而且xml文档的大小没有限制,所以有些文档就不能用DOM方式解析,而SAX不存在这样的问题。
下面上两段代码,分别使用两种方式解析一段xml
xml文件:test.xml
<?xml version="1.0" encoding="UTF-8"?>
<result>
<person>
<name>frank</name>
<addr>shaanxi xi'an software park</addr>
</person>
<person>
<name>michael</name>
<addr>shaanxi xi'an keji road</addr>
</person>
</result>
使用Dom方式解析上面的test.xml
1 import java.io.*;
2 import java.util.*;
3 import org.w3c.dom.*;
4 import javax.xml.parsers.*;
5
6 public class DomXML {
7 public static void main(String args[]) {
8 try {
9 File file = new File("test.xml");
10 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
11 DocumentBuilder builder = factory.newDocumentBuilder();
12 Document doc = builder.parse(file);
13 NodeList nl = doc.getElementsByTagName("person");
14 for (int i = 0; i < nl.getLength(); i++) {
15 System.out.println("name: " +
16 doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue());
17 System.out.println("address: " +
18 doc.getElementsByTagName("addr").item(i).getFirstChild().getNodeValue());
19 }
20 } catch (Exception e) {
21 e.printStackTrace();
22 }
23 }
24 }
使用SAX方式解析test.xml
1 import org.xml.sax.*;
2 import org.xml.sax.helpers.*;
3 import javax.xml.parsers.*;
4
5 public class SaxXML extends DefaultHandler {
6
7 java.util.Stack tags = new java.util.Stack();
8
9 public SaxXML() {
10 super();
11 }
12
13 public static void main(String[] args) {
14 try {
15 SAXParserFactory sf = SAXParserFactory.newInstance();
16 SAXParser sp = sf.newSAXParser();
17 SaxXML saxXml = new SaxXML();
18 sp.parse(new InputSource("test.xml"), saxXml);
19 } catch(Exception e) {
20 e.printStackTrace();
21 }
22 }
23
24 public void characters(char ch[], int start, int length) throws SAXException {
25 String tag = (String) tags.peek();
26 if (tag.equals("name")) {
27 System.out.println("name: " + new String(ch, start, length));
28 }
29
30 if (tag.equals("addr")) {
31 System.out.println("address: " + new String(ch, start, length));
32 }
33 }
34
35 public void startElement(String uri, String localName, String qName, Attributes attrs) {
36 tags.push(qName);
37 }
38
39 }
分享到:
相关推荐
### 使用StAX组装与解析XML #### 一、引言 在处理XML文档时,Java提供了多种工具和技术,包括DOM、SAX以及本文将重点讨论的Streaming API for XML(简称StAX)。StAX是一种用于读取和写入XML数据的事件驱动型API,...
Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为XML处理提供了一种高效且方便的解决方案,尤其适用于...
### 如何用Document解析XML文件:Java XML解析深入解析 #### 概述 XML(Extensible Markup Language)是一种用于标记数据、定义数据类型、便于结构化数据存储与传输的文件格式。随着技术的发展,XML因其良好的结构...
本文将深入探讨如何在Android中使用PULL解析器(Pull Parser)来解析XML文档,这是一种轻量级且高效的解析方式。 **PULL解析器概述** PULL解析器(Pull Parsing)是一种事件驱动的解析模型,它不需要完整的XML文档...
### Java解析XML的方法 #### 一、概述 随着互联网技术的发展,XML(可扩展标记语言)作为一种跨平台、跨语言的数据交换格式,在多种场景下得到了广泛的应用。由于其良好的兼容性和标准化特性,XML成为了数据集成与...
下面是一个简单的JDOM解析XML的步骤概述: 1. 创建`SAXBuilder`对象:`SAXBuilder builder = new SAXBuilder();` `SAXBuilder`是JDOM中用于从XML源(文件或流)构建`Document`对象的类,它使用SAX(Simple API for...
### XML解析方法详解 #### 一、概述 随着互联网技术和数据交换需求的不断增加,XML(Extensible Markup Language,可扩展标记语言)作为一种重要的数据交换格式,被广泛应用于各种场景之中。XML不仅支持自定义标签...
- **使用方法**:通过`DocumentBuilderFactory`创建`DocumentBuilder`,然后用`parse()`方法解析XML文件,得到`Document`对象,可以通过API操作这棵树。 在实际开发中,根据项目需求选择合适的解析方式。对于内存...
1. 加载XML:使用DOM解析器如Java的`DocumentBuilderFactory`创建`DocumentBuilder`,然后用它来解析XML文件,得到`Document`对象。 2. 获取根节点:`Document`对象的`getDocumentElement()`方法返回XML文档的根...
根据提供的文件内容,我们可以概述Java解析XML的四种主要方法:DOM、SAX、StAX以及JDOM。 1. DOM(文档对象模型)解析: DOM解析将XML文档加载为树形结构(DOM树),在内存中表示整个XML文档。因此,DOM在解析过程...
在Android系统中,XML Pull解析是一种轻量级且高效的解析XML文档的方法,它允许应用程序按需读取XML文档的节点,而无需加载整个文档到内存中。以下是关于Android XML Pull解析的详细知识讲解。 1. **XML Pull解析器...
以下是一个简单的SAX解析XML的步骤概述: 1. 实现`ContentHandler`接口:这是SAX解析器与用户代码交互的主要接口,需要实现如上述提到的各种事件处理方法。 2. 创建解析器:通过`SAXParserFactory`和`SAXParser`类...
一、XML概述 XML(eXtensible Markup Language)是一种可扩展标记语言,用于结构化数据的存储和交换。它具有自解释性,允许开发者定义自己的标签来表示数据。在Android中,XML用于定义UI布局、资源文件、应用程序...
本篇文章将深入探讨SAX解析XML的方法和优势。 **SAX解析器概述** SAX解析器是一种基于事件驱动的解析器,它不会一次性加载整个XML文档到内存中,而是逐行读取,当遇到XML文档中的元素、属性等特定事件时,会触发...
本文介绍了一种使用状态机来解析XML文件的方法。状态机是一种广泛应用于各种场景下的有限状态自动机,它可以非常高效地处理各种输入序列,特别是在解析语言或者协议时。本项目通过定义一系列状态及其之间的转换规则...
### Expat XML解析器概述 Expat是一个用C语言编写的XML解析库,最初是作为开源项目,归属于Mozilla项目的一部分。它由著名的XML专家James Clark创建,他也是groff、Jade、XP(一个Java XML解析器包)、XT(一个Java ...
使用SAX解析XML文档时,需要实现`ContentHandler`接口,并重写其中的方法以处理解析过程中产生的事件。 **示例代码**: ```java public class SaxDemo implements ContentHandler { @Override public void ...
本文详细介绍了使用 Python 的 `xml.dom.minidom` 库解析、更新和写入 XML 文件的方法。通过这些技术,你可以轻松地处理复杂的 XML 数据结构,无论是简单的数据检索还是复杂的文件更新。掌握这些技巧对于处理 Web ...
3. **解析XML文档**:调用解析器的`XML_Parse()`函数,传入XML文档的字节流。 4. **处理回调事件**:在回调函数中,根据接收到的元素、属性等信息进行操作。 5. **释放资源**:解析完成后,释放解析器和分配的内存。...