01 SAX解析xml
来源:互联网 发布:淘宝违禁品防排查技巧 编辑:程序博客网 时间:2024/06/06 03:23
第一步 创建一个Person类存放相关信息
package com.xiaoxin.xml.bean;public class Person{private Integer id;private String name;private Short age;public Person() {super();}public Person(Integer id, String name, Short age) {super();this.id = id;this.name = name;this.age = age;}public Person(String name, Short age) {super();this.name = name;this.age = 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 Short getAge() {return age;}public void setAge(Short age) {this.age = age;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";}}第二步 新建一个类继承DefultHandle而DefultHandle实现了controlHandle的接口 controlHandle提供了相关的事件方法 然后在其中覆盖
startDocumnet() :当开始解析xml文件的声明的时候就会触发这个事件, 可以做一些初始化的工作
startElement() 当开始解析元素的开始标签的时候,就会触发这个事件
characters() 当读到文本元素的时候要触发这个事件.
endElement() 当读到结束标签的时候 就会触发这个事件
先看 XML文件吧,好对SAX读取的顺序有个了解
<?xml version="1.0" encoding="utf-8"?><span style="white-space:pre"></span><person> <person id="23" > <name>NEwii </name> <age>21 </age> </person>
<person id="20" > <name>WiiWill </name> <age>25 </age> </person></person>
package com.xiaoxin.xml;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 android.util.Log;import com.xiaoxin.xml.bean.Person;public class Sax extends DefaultHandler {private static final String TAG="Sax";//用一个集合存放解析东西private List<Person>persons;private String perTag;//通过此变量 ,记录前一个标签的名称Person person;//记录当前Personpublic List<Person>getPersons(){return persons;}@Overridepublic void startDocument() throws SAXException {persons=new ArrayList<Person>();Log.i(TAG, "开始解析了");super.startDocument();}/* (non-Javadoc) * uri命名空间 * localName 标签名称 * qName 戴明明空间的标签名 * attributes 存放该标签的所有属性 */@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {//首先判断是不是我们想要的元素if("person".equals(localName)){for(int i=0;i<attributes.getLength();i++){
<span style="white-space:pre"></span>Log.i(TAG, "attributesName:"+attributes.getLocalName(i)+"attributes_value"+attributes.getValue(i));//需要处理的一个对象的开始标记 所以我们在这里需要new一个person对象person=new Person();person.setId(Integer.valueOf(attributes.getValue(i)));}}perTag=localName;Log.i(TAG, "****startElement");}/* (non-Javadoc) * ch 当前读到Textnode字节数组 * start 直接开始的位置 * lengh textnode的长度 * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int) */@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {String data=new String(ch,start,length).trim();if(!"".equals(data.trim())){Log.i(TAG,"content:"+data.trim());}if("name".equals(perTag)){person.setName(data);}else if("age".equals(perTag)){person.setAge(new Short(data));}}@Overridepublic void endDocument() throws SAXException {Log.i(TAG,"********endDocument()******");}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {Log.i(TAG,qName+"******endElement()**");if("person".equals(localName)){persons.add(person);person=null;}perTag=null;}}然后在配置文件中 配置 测试单元
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xiaoxin.xml" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- 增加测试单员 --> <uses-library android:name="android.test.runner" /> <activity android:name="com.xiaoxin.xml.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application><!-- 增加测试单员 --> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.xiaoxin.xml" > </instrumentation></manifest>
测试单员
package com.xiaoxin.xml;import java.io.InputStream;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import com.xiaoxin.xml.bean.Person;import android.test.AndroidTestCase;import android.util.Log;public class PersonServiceTest extends AndroidTestCase {private static final String TAG = "PersonServiceTest";public void testSax()throws Throwable{//因为XML在src文件中 可以直接反射到路径 inputStreamInputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("xiaoxin.xml");Sax sax=new Sax();//建立解析工厂SAXParserFactory spf=SAXParserFactory.newInstance();//简历解析模式SAXParser saxParser=spf.newSAXParser();//导入路径 和解析方法 开始saxParser.parse(inputStream, sax);List<Person>persons=sax.getPersons();inputStream.close();for(Person person:persons){Log.i(TAG, person.toString());}}}
0 0
- 01 SAX解析xml
- [XML] SAX解析XML
- 【XML】SAX解析XML
- XML解析(SAX解析)
- XML解析:SAX解析
- Study SAX《SAX解析XML》
- 使用SAX解析XML
- 解析xml之--SAX
- SAX解析XML
- SAX解析XML
- xml文件解析-SAX
- 解析xml之--SAX
- 解析xml之--SAX
- 使用SAX解析XML
- XML学习《SAX解析》
- SAX解析XML例子
- java sax 解析 xml
- 使用SAX解析XML
- Android平台下基于XMPP的IM研究(二 MultiUserChat 聊天室)
- Unix网络编程(一)-套接字地址结构
- 文件链接
- Mongdb安装与使用心得(一)
- Linux设备驱动剖析之SPI(一)
- 01 SAX解析xml
- 大数模板
- Tomcat中JDK修改
- 基于XMPP协议的Android即时通信系
- zoj 2412 Farm Irrigation dfs
- Android -- 经验分享
- 一切皆Socket
- c语音中for循环使用两个判断条件的写法
- fetchAll()函数