用SAX解析XML实例

Java SAX 解析 XML 与 DOM 建立树形结构的方式不同,SAX 采用事件模型来解析 XML 文档,是解析 XML 文档的一种更快速、更轻量的方法。 利用 SAX 可以对 XML 文档进行有选择的解析和访问,而不必像 DOM 那样加载整个文档,因此它对内存的要求较低。 但 SAX 对 XML 文档的解析为一次性读取,不创建任何文档对象,很难同时访问文档中的多处数据。 在解析xml文件之前,我们要先了解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解析简介 SAX(Simple API for XML)是一种以事件驱动的XML API,是XML解析的方式之一。DOM解析会将XML全部加载到内存中,再进行解析。SAX与DOM不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,所以它解析XML具有速度快,占用内存少的优点。 SAX解析步骤 SAX解析的核心步骤有如下几步: 得到xml文件对应的资源,可以是xml的输入流,文件和... 阅读详情

相关推荐

SAX解析XML实例

XML可扩展标记语言,是Internet环境中的跨平台的依赖于内容的技术。是当前处理结构化文档信息的有力工具。 本文给出用SAX解析XML实例。 SAX只能够读取XML,不能修改XML,但是SAX占资源小,适合用于android。 sax采用流式处理的方式,当遇到一个标签时,它并不会记录下以前的标签,也就是说你只能知道当前的标签的名字和属性。 事件接口:ContentHandler实现了D

glu_cky的博客 629

XML解析(一),SAX解析XML

一、概述 SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOC解析,PULL解析(Android特有),SAX与DOC不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,所以它解析XML具有速度快,占用内存少的优点,对于Android等CPU资源宝贵的移动平台来说是一个巨大的优势。 SAX的优点:解析速

宿罪的博客 3万+

SAX技术解析XML文档的全面实例

在SAX解析过程中,事件处理器扮演着极其重要的角色。它相当于整个解析流程中的“大脑”,负责处理在解析XML文档时触发的各种事件。SAX解析器通过回调方法向事件处理器报告当前解析状态,并由事件处理器决定如何响应这些事件。这种机制确保了解析过程中对内存的使用始终保持在最低水平,因为不需要将整个XML文档加载到内存中。

weixin_34618526的博客 907

SAX解析XML 详解

SAX解析XML 详解

此生尽兴 7812

Halcon 简单的形状匹配定位与区域跟随

【代码】Halcon简单的形状匹配定位与区域跟随。

唐大狗 2806

深入解析五大ADC芯片架构及其应用场景

本文深入解析了五大ADC芯片架构及其应用场景,包括逐次逼近型ADC、Σ-Δ型ADC、流水线型ADC、闪存型ADC和积分型ADC。通过详细的架构分析和实际应用案例,帮助工程师理解不同ADC芯片的特点和适用场景,提升电路设计效率。

weixin_28702105的博客 355

XML——XML解析之SAX

本文详细介绍了使用SAX解析XML文档的机制和方法

Gavin 1970

如何用谷歌插件Apollo.io高效开发客户?手把手教你避开常见坑点

本文详细介绍了如何利用谷歌插件Apollo.io高效开发外贸客户,包括核心功能解析、免费额度最大化利用策略、多插件协同技巧以及常见陷阱规避方法。通过Apollo.io的智能匹配算法和庞大数据库,外贸从业者可以精准锁定目标客户,提升开发效率。

banana的博客 885

Python之SAX解析XML

SAX 是一种基于事件驱动的API。 利用 SAX 解析 XML 文档牵涉到两个部分: 解析器和事件处理器。 解析器负责读取 XML 文档,并向事件处理器发送事件,如元素开始跟元素结束事件。 而事件处理器则负责对事件作出响应,对传递的 XML 数据进行处理。 1、对大型文件进行处理; 2、只需要文件的部分内容,或者只需从文件中得到特定信息。 3、想建立自己的对象模型的时候。 在 Python 中...

起风了 3832

Vue 网络处理 - axios 异步请求的使用,请求响应拦截器(最佳实践)

axios 用来在前端页面发起一个异步请求,请求之后页面不动,响应回来刷新局部.1.为什么不使用 ajax 呢?官方:在 jQuery 中推荐使用 ajax 技术, Vue 里面不推荐使用 jQuery 框架,因此 Vue 更推荐使用 axiox 异步请求库(axios并不是 vue 官方库).2.axios 特性可以从浏览器中创建 XMLHttpRequests可以从 node.js 中创建 http 请求.支持 Promise API.支持拦截请求和响应.转换请求数据和响应数据.

CYK_byte的博客 1万+

PY32F406K1CU6+I2C+ AT24C64 基本配置

【代码】PY32F406K1CU6+I2C+ AT24C64 基本配置。

sam的博客 90

Android之SAX解析XML

首先我们来了解一下SAX解析器的基本知识: SAX(Simple API for XML)解析器是一种基于事件的解析器,事件驱动的流式解析方式是,从文件的开始顺序解析到文档的结束,不可暂停或倒退。它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的。当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理。在事件源调用事件处理器中特定方法的时候,还要传递给事件处理器相

bear_huangzhen的专栏 1万+

AMBA-CHI协议详解(七)

本节描述该协议包含的支持系统保序需求的机制。

Crazzy_M的博客 1158

使用SAX解析XML实例

SA相比DOM有如下好处:不用全部加载完xml后才能开始解析,可以一边加载一便解析,提高效率 package sax;import java.io.File;import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser

我的世界我的梦 1449

【机器人技术基础】MATLAB Robotics Toolbox PUMA560 运动学正逆解

机器人技术基础实验2报告 1. 实验目的和要求 2. 实验手段 2.1 实验原理 2.2 函数详解 3. 实验主要内容 4. 实验结果和分析 4.1 正运动学求解 例1 例2 4.2 逆运动学求解 例1 例2 1. 实验目的和要求 掌握常见形式的机器人的D-H坐标系建立方法、运动学建模; 正逆运动学分析与求解; 使用Robotics Toolbox对直角坐标机器人、圆柱坐标机器人、球坐标机器人、PUMA560其中之一建立运动学模型,正逆求解和仿真。 2. 实验手段 2.1

【人工智障 | 计算鸡视觉 | 机器孩】 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SAX解析xml简单实例

SAX解析xml简单实例    SAX解析XML简单实例 2007-11-11 00:36      SAX主要是以串行和层次的方式进行解析,如下是一个很简单的解析例子: 1、选择一个要解析的xml文档      <book xmlns="http://www.oreilly.com/javaxml2" xmlns:ora="http://w

chen_xiaowei123的专栏 530

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SAX解析XML

SAX解析XML 1.XML(Extensible Markup Language 可扩展标记语言),XML是一个以文本来描述数据的文档。 XML文档示例: <?xml version="1.0" encoding="UTF-8" ?> <people> <person personId="E01"> <name>Tony Blair</name> <address>10 Downing Stre

七一 1654

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SAX解析XML文档

SAX采用事件处理器的方式解析XML文档,利用SAX解析XML文档,涉及两个部分:解析器和事件处理器 解析器可以使用JAXP的API进行创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档 解析器在采用SAX方式解析某个XML文档时,它只要解析到XML文档的一个组成部分,都回去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前XML文件内容作为方法的参数传递给事件处

RO_wsy的专栏 2557

XML 之解析之SAX解析器

一、        前言 用 Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object Module)称为DOM。Sun公司提供了Java API for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的

GressLove的博客 650

简析SAX解析xml文件

SAX解析: 优点:不用实现调入整个文档,占用资源少。尤其在嵌入式环境中,如android,极力推荐使用SAX解析。   缺点:不像DOM解析一样将文档长期驻留在内存中,数据不是持久的。如果事件过后没有保存数据,数据就会丢失。   使用场合:机器有性能限制。 SAX(Simple API for XML)解析器是一种基于事件的解析器,事件驱动的流式解析方式是,从文件的开始顺序解析到文档的结束,不可...

s56564的博客 1261

DOM 解析和SAX解析 XML 文档

一、xml的解析方式Dom和SAX区别: DOM:当按 照DOM模型解析XML文档时,就会在内存中构造一个对应的DOM树,它可以用于不同节点之间的遍历。然而,在遍历之前必须先完成DOM树的构造。因此, 在处理规模较大的XML文档时就很耗内存,占用资源较多。尤是只需要操作文档中一小部分时效率很低。DOM的优点在于它在内存中保存文档的整个模型。DOM的基本对象有5个:Document,Node,

yanmei的专栏 1190
上一篇: android 实用sax 读取xml文件内容
下一篇: CVS 提示错误的意思
vrix
博客等级 码龄24年 673粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值