SAX(Simple API for XML)

https://docs.oracle.com/javase/tutorial/jaxp/sax/parsing.html

persons.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="">
<name>张三</name>
<age></age>
</person>
<person id="">
<name>李四</name>
<age></age>
</person>
<person id="">
<name>王五</name>
<age></age>
</person>
</persons>

Person实体类

package com.rocky.tools.xml.domain;

public class PersonOfXml
{
private Integer id;
private String name;
private Integer age; public Integer getId()
{
return id;
} public void setId(Integer id)
{
this.id = id;
} public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} public Integer getAge()
{
return age;
} public void setAge(Integer age)
{
this.age = age;
} @Override
public String toString()
{
return "PersonOfXml [id=" + id + ", name=" + name + ", age=" + age
+ "]";
} }

personHandler.java

package com.rocky.tools.xml.handler;

import java.util.ArrayList;
import java.util.List; import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; import com.rocky.tools.xml.domain.PersonOfXml; public class PersonHandler extends DefaultHandler
{
private List<PersonOfXml> list = new ArrayList<PersonOfXml>(1);
private PersonOfXml person = null;
private String currentTag = null; public List<PersonOfXml> getList()
{
return list;
} @Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
//要取得的标记 if("person".equals(qName))
{
person = new PersonOfXml();
person.setId(Integer.parseInt(attributes.getValue("id")));
}
currentTag = qName;
} @Override
public void endElement(String uri, String localName, String qName)
throws SAXException
{
if("person".equals(qName))
{
list.add(person);
//回收这个对象
person = null;
}
currentTag = null;
} @Override
public void characters(char[] ch, int start, int length)
throws SAXException
{
/**
* <person id="1">
<name>张三</name>
<age>24</age>
</person>
*/ if("name".equals(currentTag))
{
person.setName(new String(ch,start,length));
} if("age".equals(currentTag))
{
person.setAge(Integer.parseInt(new String(ch,start,length)));
}
} }

main

package com.rocky.tools.xml.MainAndTest;

import java.io.IOException;
import java.util.List; import javax.sql.rowset.spi.XmlReader;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException;
import org.xml.sax.XMLReader; import com.rocky.tools.xml.domain.PersonOfXml;
import com.rocky.tools.xml.handler.PersonHandler; public class parseXmlMain
{
public void getPersonList()
{
//获取工厂类
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = null;
XMLReader reader = null;
List<PersonOfXml> list = null;
try
{
saxParser = spf.newSAXParser();
reader = saxParser.getXMLReader();
PersonHandler phandler = new PersonHandler();
list = phandler.getList();
reader.setContentHandler(phandler);
reader.parse("src/persons.xml");
for(PersonOfXml p : list)
{
System.out.println(p);
}
} catch (ParserConfigurationException 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();
}
}
}

test

package com.rocky.tools.xml.MainAndTest;

import static org.junit.Assert.*;

import org.junit.Test;

public class parseXmlMainTest
{
parseXmlMain m = new parseXmlMain();
@Test
public void testGetPersonList()
{
m.getPersonList();
} }

网上有很多这样的代码,我自己也敲了一边

sax 解析 xml的更多相关文章

  1. Android之SAX解析XML

    一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...

  2. Android 使用pull,sax解析xml

    pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...

  3. JAVA使用SAX解析XML文件

    在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...

  4. DOM&SAX解析XML

    在上一篇随笔中分析了xml以及它的两种验证方式.我们有了xml,但是里面的内容要怎么才能得到呢?如果得不到的话,那么还是没用的,解析xml的方式主要有DOM跟SAX,其中DOM是W3C官方的解析方式, ...

  5. cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)

    今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会 ...

  6. SAX解析xml浅析

    SAX解析XML文件采用事件驱动的方式进行,也就是说,SAX是逐行扫描文件,遇到符合条件的设定条件后就会触发特定的事件,回调你写好的事件处理程序.使用SAX的优势在于其解析速度较快,占用内存较少(相对 ...

  7. JavaWeb学习日记----SAX解析XML

    1.SAX解析XML文档的方式: 与DOM方式解析不同,DOM方式解析是根据XML的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象.优点是可以很方便实现增删改操作.缺点是,如 ...

  8. 用SAX解析xml文件,java

    (此文为(https://www.imooc.com/video/4482)之随笔) 1.用SAX解析xml文件大致分为三步 写了一个XML文件作为例子 (1)main方法代码如下: import j ...

  9. Python:使用基于事件驱动的SAX解析XML

    SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 ...

  10. Android SAX解析XML

    本篇讲解一下SAX解析XML这种方式,首先来看一下它的基本介绍: SAX是一种以事件驱动的XML API,由它定义的事件流可以指定从解析器传到专门的处理程序的代码的XML结构,简单的讲,它是种解析速度 ...

随机推荐

  1. 使用Proguard做Java代码混淆

    下载Proguard, 我下的是最新的Proguad5.2 在windows下运行bin/proguardgui.bat, 可以看见图形界面, 载入配置, 然后process. 配置文件例子 -inj ...

  2. 夯实基础之php学习-2提高篇

    1,Jpgraph, 详见Php图形化jpgraph 2,文件系统 文件的操作步骤:打开文件->操作文件->关闭文件 打开文件fopen(filename,mode) 关闭文件fclose ...

  3. 05传智_jbpm与OA项目_部门模块中增加部门的jsp页面增加一个在线编辑器功能

    这篇文章讲的是在线编辑器功能,之前的部门模块中,增加部门的功能jsp页面起先是这么做的.

  4. Ros集成开发环境配置

    参考资料: http://blog.csdn.net/yangziluomu/article/details/50848357 ROS使用IDE Eclipse http://blog.csdn.ne ...

  5. (一)GATT Profile和GAP 简介(目前所有的BLE应用都基于GATT,所以也要了解是怎么一回事)-转发

    个人大总结:(先后顺序) 1.GAP协议定义多个角色(其中就有中心设备[GATT客户端](唯一)叫主设备||和外围设备[GATT服务端端](多个)也叫从设备). 2.先经过GAP协议,再有GATT协议 ...

  6. Python2.2-原理之类型和运算

    此节来自于<Python学习手册第四版>第二部分 一.Python对象类型(第4章) 1. Python可以分解成模块.语句.表达式以及对象:1.程序由模块构成:2.模块包含语句:3.语句 ...

  7. 大新闻!HoloLens即将入华商用

    昨天微软搞了大新闻,Terry和Alexi到了深圳,在WinHEC大会上宣布了2017上半年HoloLens正式入华商用. 关于HoloLens的技术原理和细节官方文档和报道已经披露很多了,他是一款真 ...

  8. SQLite常用点滴总结(转)

    expressionexpr ::=     expr binary-op expr |expr [NOT] like-op expr [ESCAPE expr] |unary-op expr |( ...

  9. Matlab和simulink数据的保存和读取

    文件的存储 MATLAB支持工作区的保存.用户可以将工作区或工作区中的变量以文件的形式保存,以备在需要时再次导入.保存工作区可以通过菜单进行,也可以通过命令窗口进行. 1. 保存整个工作区 选择Fil ...

  10. 将Microsoft Ajax Minifier集成到VS2013对JS、CSS进行编译时压缩

    在网站发布中,一般要将js,css文件压缩减少体积,以减少在HTTP请求中的流量.将Microsoft Ajax Minifier集成到VS2013中就可以对JS.CSS进行编译时压缩. VS2013 ...