`

用SAX解析XML实例

 
阅读更多

实例:以下输出XML中的所有属性和标签值

package com.meixin.xml;

import java.io.File;

import java.util.HashMap;

import java.util.Vector;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

public class PraseXML extends DefaultHandler

{

private Vector<String> tagName;

private Vector<String> tagValue;

private int step;

// 开始解析XML文件

public void startDocument() throws SAXException

{

tagName = new Vector<String>();

tagValue = new Vector<String>();

step = 0;

}

// 结束解析XML文件

public void endDocument() throws SAXException

{

for (int i = 0; i < tagName.size(); i++)

{

if (!tagName.get(i).equals("") || tagName.get(i) != null)

{

System.out.println("节点名称:" + tagName.get(i));

System.out.println("节点值:" + tagValue.get(i));

}

}

}

/**

* 在解释到一个开始元素时会调用此方法.但是当元素有重复时可以自己写算法来区分

* 这些重复的元素.qName是什么? <name:page ll=""></name:page>这样写就会抛出SAXException错误

* 通常情况下qName等于localName

*/

public void startElement(String uri, String localName, String qName,

Attributes attributes) throws SAXException

{

// 节点名称

tagName.add(qName);

// 循环输出属性

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

{

// 获取属性名称

System.out.println("属性名称:" + attributes.getQName(i));

// 获取属性值

System.out.println("属性值:"

+ attributes.getValue(attributes.getQName(i)));

}

}

/**

* 在遇到结束标签时调用此方法

*/

public void endElement(String uri, String localName, String qName)

throws SAXException

{

step = step + 1;

}

/**

* 读取标签里的值,ch用来存放某行的xml的字符数据,包括标签,初始大小是2048,

* 每解释到新的字符会把它添加到char[]里。 * 注意,这个char字符会自己管理存储的字符,

* 并不是每一行就会刷新一次char,start,length是由xml的元素数据确定的,

* 暂时找不到规律,以后看源代码.

*

* 这里一个正标签,反标签都会被执行一次characters,所以在反标签时不用获得其中的值

*/

public void characters(char ch[], int start, int length)

throws SAXException

{

// 只要当前的标签组的长度一至,值就不赋,则反标签不被计划在内

if (tagName.size() - 1 == tagValue.size())

{

tagValue.add(new String(ch, start, length));

}

}

public static void main(String[] args)

{

String filename = "MyXml.xml";

SAXParserFactory spf = SAXParserFactory.newInstance();

try

{

SAXParser saxParser = spf.newSAXParser();

saxParser.parse(new File(filename), new PraseXML());

}

catch (Exception e)

{

e.printStackTrace();

}

}

public Vector getTagName()

{

return tagName;

}

public void setTagName(Vector tagName)

{

this.tagName = tagName;

}

public Vector getTagValue()

{

return tagValue;

}

public void setTagValue(Vector tagValue)

{

this.tagValue = tagValue;

}

}

输出结果:

属性名称:personid

属性值:e01

属性名称:enable

属性值:true

属性名称:personid

属性值:e02

属性名称:enable

属性值:false

属性名称:personid

属性值:e03

属性名称:enable

属性值:true

节点名称:people

节点值:

节点名称:person

节点值:

节点名称:name

节点值:张三

节点名称:tel

节点值:5128

节点名称:email

节点值:txq512@sina.com

节点名称:person

节点值:

节点名称:name

节点值:meixin

节点名称:tel

节点值:5252525

节点名称:email

节点值:wnight88@sina.com

节点名称:person

节点值:

节点名称:name

节点值:yu

节点名称:tel

节点值:5389654

节点名称:email

节点值:yu@188.net

MyXml.xml文件内容

<?xml version="1.0" encoding="UTF-8"?>

<people>

<person personid="e01" enable="true">

<name>张三</name>

<tel>5128</tel>

<email>txq512@sina.com</email>

</person>

<person personid="e02" enable="false">

<name>meixin</name>

<tel>5252525</tel>

<email>wnight88@sina.com</email>

</person>

<person personid="e03" enable="true">

<name>yu</name>

<tel>5389654</tel>

<email>yu@188.net</email>

</person>

</people>

分享到:
评论

相关推荐

    SAX解析XML文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...

    SAX解析XML实例

    总的来说,SAX解析XML是一种高效且灵活的方法,适用于处理大型XML文档。通过自定义事件处理器,我们可以根据业务需求定制解析逻辑,从而有效地解析和利用XML数据。在实际项目中,结合源码分析和工具使用,如IDE中的...

    sax解析xml实例

    8. **解析XML**:在Java中,使用SAX解析XML的基本步骤如下: - 创建`SAXParserFactory`实例。 - 配置解析器,如是否验证XML文档。 - 使用`SAXParserFactory`创建`SAXParser`实例。 - 创建`ContentHandler`实现类...

    读取RSS-SAX解析XML实例(java版)

    标题"读取RSS-SAX解析XML实例(java版)"所涉及的知识点主要集中在两个方面:一是如何读取RSS(Really Simple Syndication)数据,二是使用SAX解析XML文件。 RSS是一种用于发布新闻、博客和其他定期更新内容的格式...

    android 使用Sax解析XML 源码实例

    下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...

    Servlet利用SAX解析XML文档

    以下是使用Servlet和SAX解析XML的基本步骤: 1. **创建Servlet**:首先,你需要创建一个Servlet类,继承HttpServlet,并重写doGet或doPost方法,因为XML解析通常发生在HTTP请求处理中。 2. **添加SAX解析器依赖**...

    Sax解析xml文件

    以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...

    sax解析xml文件

    总结来说,"saxloadxml"项目提供了使用SAX解析XML文件的一个实例,可以帮助开发者了解如何利用SAX解析器处理XML文档,尤其是在性能和内存使用方面有较高要求的情况下。通过学习和实践这个项目,你可以提升处理XML...

    sax解析xml尤其是获取元素的值或者内容

    在使用SAX解析XML前,需要创建一个解析器实例。Java中,可以使用`SAXParserFactory`来生成`SAXParser`,然后调用`parse()`方法解析XML文件。例如: ```java SAXParserFactory factory = SAXParserFactory.new...

    sax解析xml本地读取xml

    标题“sax解析xml本地读取xml”指的是使用SAX解析器来读取和解析存储在本地文件系统中的XML文件。这种方式适用于处理那些无法一次性加载到内存中的大型XML文档,或者对于内存有限的环境。 SAX解析的基本工作原理...

    android使用SAX解析xml

    - `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...

    [Android]使用SAX解析XML文件

    以下是使用SAX解析XML文件的步骤: 1. 引入依赖:在Android项目中,通常需要添加`xmlpull`库,它包含了SAX解析器。可以在`build.gradle`文件中添加依赖: ``` implementation 'xpp3:xpp3:1.1.4c' ``` 2. 创建...

    一个关于sax解析xml的demo

    这个"Project1231_001_XML_SAX"可能包含了一个简单的XML文件和对应的SAX解析示例代码,通过运行这个项目,开发者可以了解如何在实际应用中使用SAX解析XML数据,以及如何处理XML文档中的不同结构。学习和理解SAX解析...

    java解析xml数据---sax解析器

    以下是使用SAX解析XML的基本步骤: 1. 创建一个实现DefaultHandler或ContentHandler接口的类,重写其中的方法,如startElement()、endElement()和characters(),用于处理XML文档的结构和数据。 2. 实例化SAX解析器...

    sax解析xml

    通过以上步骤,我们就能使用SAX解析XML文档了。这种解析方式适用于处理大文件,因为它不会一次性加载整个XML文档到内存,而是按需逐行读取,从而节省内存资源。在实际项目中,可以根据需求定制ContentHandler来实现...

    Dom,Sax,Xpath解析XML实例

    在实际开发中,XPath常与DOM或SAX结合使用,先由DOM或SAX解析XML,然后用XPath进行查询。 实例应用: 假设我们有一个XML文件,内容如下: ```xml &lt;name&gt;John Doe &lt;position&gt;Manager &lt;name&gt;Jane Smith ...

Global site tag (gtag.js) - Google Analytics