sax解析xml

Java SAX 解析 XML 与 DOM 建立树形结构的方式不同,SAX 采用事件模型来解析 XML 文档,是解析 XML 文档的一种更快速、更轻量的方法。 利用 SAX 可以对 XML 文档进行有选择的解析和访问,而不必像 DOM 那样加载整个文档,因此它对内存的要求较低。 但 SAX 对 XML 文档的解析为一次性读取,不创建任何文档对象,很难同时访问文档中的多处数据。 在解析xml文件之前,我们要先了解xml文件的 阅读详情

在assets 中放histore.xml的内容:

<?xml version="1.0" encoding="utf-8"?>
<persons>
<person>
<id>20</id>
<name>李明</name>
<age>30</age>
</person>
<person>
<id>21</id>
<name>手机</name>
<age>25</age>
</person>
</persons>

sax是一个一个person解析出来,再用list.add增加,最后得到一个personlist的,先看Persons.java,

package com.cg.xmldemo;

import android.R.integer;
import android.util.Log;

public class Persions {

public int mid;
public String mname=null;
public int mage ;

public int getId()
{

return mid;
}
public void setId(int id)
{
this.mid=id;

}
public String getName()
{
return mname;
}
public void setName(String name)
{
this.mname=name;
}
public int getAge()
{
return mage;
}
public void setAge(int age)
{
this.mage=age;

}
public String tostring()
{
String ret="id:" + mid + ", name:"+ mname+ ",age:" + mage;
return ret;
}

}
persons.java的目的是为是在解析时每个xml中的person对应 一个person对象为最终的list服务。


以下为saxpersoncontenHandle.java,解析xml过程

package com.cg.xmldemo;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import android.util.Log;

import org.xml.sax.Attributes;



public class SaxPersonsContentHandler extends DefaultHandler{

private List personsList;
private Persions person;
private String tagName;

public List getPersons()
{
return this.personsList;
}
public void startDocument() throws SAXException{
this.personsList=new ArrayList();
}

public void characters (char[] ch,int start,int length) throws SAXException{
if(this.tagName!=null)
{
String data =new String(ch,start,length);
if(this.tagName.equals("id")){
person.setId(Short.parseShort(data));
}else if(this.tagName.equals("name")){
person.setName(data);
}else if(this.tagName.equals("age")){
person.setAge(Short.parseShort(data));
}
}
}
public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException{

if(localName.equals("person")){
person = new Persions();
}
this.tagName=localName;
}
public void endElement(String uri,String localName,String qName) throws SAXException{
if(localName.equals("person")){
this.personsList.add(this.person);
}
this.tagName=null;
}
public static List<Persions> readXML(InputStream inStream) {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = spf.newSAXParser(); //创建解析器
SaxPersonsContentHandler handler = new SaxPersonsContentHandler();
saxParser.parse(inStream, handler);
inStream.close();
return handler.getPersons();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}


测试:

package com.cg.xmldemo;

import java.io.InputStream;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import android.app.Activity;
import android.os.Bundle;
import android.test.AndroidTestCase;
import android.util.Log;

public class Xml_demoActivity extends Activity {
/** Called when the activity is first created. */

private PersonParser parser;
private List<Persions> perions;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
testAndroidSaxReadXML();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//测试程序
public void testAndroidSaxReadXML() throws Throwable{
InputStream file = getAssets().open("histore.xml");//this.getClass().getClassLoader().getResourceAsStream("histore.xml");
if(file==null)
{

return ;
}
try {
perions=SaxPersonsContentHandler.readXML(file);
// Log.v("=================","perions.size= " + perions.size());
for (int i=0;i<perions.size();i++)
{
//perions.get(i).tostring();
Log.v("=================","perions("+i+"): " + perions.get(i).tostring());
}
} catch (Exception e) {
Log.e("================", e.toString());
}
}



}












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万+

数据讲述中国故事!和鲸助力中国综合社会调查(CGSS)数据分析与可视化大赛圆满收官

用数据研究中国问题、总结中国道路、讲述中国故事。和鲸作为协办单位全程支持本次大赛,为中国人民大学中国调查与数据中心实施全套赛事系统,同时提供完备而周全的赛事运营服务。

ModelWhale的博客 1410

SAX解析XML 详解

SAX解析XML 详解

此生尽兴 7812

二阶锥松弛在配电网最优潮流计算中的应用(IEEE33节点配电网最优潮流算例matlab程序)(yalmip+cplex)

文献[7]建立了以支路潮流计算为基础的OPF模型,针对OPF中的非凸性约束,采用SOCR技术将其松弛为二阶锥约束,整个 OPF 模型则被转化为二阶锥规划( Second Order Cone Programming,SOCP)问题,对其求解可以得到全局最优解。其次结合辐射型配电网潮流特点建立支路潮流约束,并考虑配电网中的可控单元,包括分布式电源和离散、连续无功补偿装置,建立其出力约束,该模型为非凸非线性模型;式中,αj,t和βij,t分别为t时段内节点i电压的二次方和支路ij电流的二次方。

weixin_47365903的博客 1万+

从零到一:STM32CubeMX虚拟串口开发中的常见陷阱与优化策略

本文深入探讨了STM32CubeMX在USB虚拟串口开发中的常见问题与优化策略,涵盖数据流吞吐量瓶颈、实时性约束等核心挑战。通过实战案例和代码示例,详细解析了波特率同步异常、数据丢失等问题的解决方案,并提供了DMA配置和中断优先级调优的高级技巧,帮助开发者提升STM32虚拟串口的性能和可靠性。

weixin_29164185的博客 370

XML——XML解析之SAX

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

Gavin 1970

6、Dialogflow 开发全解析:从基础到高级应用

本文全面解析了 Dialogflow 的核心功能与高级应用,涵盖意图与实体的创建、上下文管理、后续意图设置以及高级实体类型的实际应用场景。详细介绍了自定义实体的导入导出规则、编程添加方法及数量限制,并通过流程图和实例说明了上下文生命周期与对话连贯性设计。结合电商、旅游、问卷调查等实际业务场景,展示了模糊匹配、自动扩展、复合实体等功能的强大灵活性。最后提供了开发最佳实践建议,帮助开发者构建高效、智能的对话系统。

kafka6courier的博客 104

Python之SAX解析XML

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

起风了 3832

全面解析智能座舱芯片参数:高通 (SA8295)vs 联发科,真实案例一行行讲给你听!

使用场景推荐芯片中低端车型 + 1屏导航语音SA8155P / MT8628(性价比高)中控+副驾+仪表+全景影像SA8255P / MT8678(性能强)高阶自动驾驶+域控融合SA8295P(顶级安全+算力)

weixin_43199439的博客 2079

极验点选click3.1.0所对应fullpage.js的逆向分析

极验3代点选验证,本文适用于使用click.3.1.0.js和fullpage919-eyz9lh.js版本的web验证码,没有细节内容,适合有基础的开发者阅读。

shanf7921的博客 650

Android之SAX解析XML

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

bear_huangzhen的专栏 1万+

HX711重量传感器原理图设计,已量产(压力传感器)

最近调通了一款针对家用、物联网场景的重量传感套件,核心用了 HX711 这颗经典的称重 AD 芯片,还加了用户最需要的 “一键校准” 功能 —— 之前帮朋友做家用米桶余量报警时,用户总吐槽校准步骤太繁琐,这次的方案把操作简化到只按一个键,试下来体验好了不少。正好拆解下这套硬件的设计逻辑,供做同类产品的朋友参考。

不脱发的程序猿 369

XML解析之SAX方式

XML解析之SAX方式解析xml文件 SAX解析方式会逐行地去扫描XML文档,当遇到标签时会触发解析处理器,采用事件处理的方式解析XML (Simple API for XML) ,不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。优点是:在读取文档的同时即可对XML进行处理,不必等到文档加载结束,相对快捷。不需要加载进内存,因此不存在占用内存的问题,可以解析超大XML。缺点是:只能用来读取XML中数据,无法进行增删改。 SAX解析可分四个步骤进行: 1、得到xml文

Fisher 2891

Codex 100个真实案例 - 用AI生成建筑平面图SVG(室内设计师的新武器)

本案例用 Codex 生成一套完整的 Python 脚本,自动绘制 SVG 格式的建筑平面图。我们会设计一个90平两室一厅的户型——客厅、主卧、次卧、厨房、卫生间一应俱全,还会自动摆放家具(沙发、床、餐桌、橱柜)、标注尺寸和面积、绘制水电路走向、生成多种配色方案。最终输出的 SVG 文件可以直接用浏览器打开展示,也可以转成 PNG 交给客户。室内设计师看了都说好!

yueyeguzhuo的专栏 763

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java Sax解析xml

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

数据工匠记 2万+

SAX解析XML文档

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

RO_wsy的专栏 2557

java sax解析xml_Java Sax解析xml

1. Java Sax解析是按照xml文件的顺序一步一步的来解析,在解析xml文件之前,我们要先了解xml文件的节点的种类,一种是ElementNode,一种是TextNode。如下面的这段book.xmlthinking in java85.5Spring in Action39.0其中,像、这种节点就属于ElementNode,而thinking in java、85.5这种就属于Text...

weixin_28785681的博客 270

DOM 解析和SAX解析 XML 文档

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

yanmei的专栏 1190
上一篇: sax解析xml时startElement没被调用!
下一篇: 一个apk多个icon入口
Nation_chen
博客等级 码龄15年 21粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值