Android开发之解析XML-SAX
来源:互联网 发布:yy网络用语什么意思 编辑:程序博客网 时间:2024/05/22 09:02
Android网络数据传递常用的有xml,json,html等,今天写一下项目中用到的解析Xml的方法---Sax解析
步骤1,新建一个数据类,如
class Person{
private String name="";
private String age="";
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
age同理
}这个对象中有名字和年龄字段
2,创建Sax的事件处理类,这个类要继承DefaultHandler这个类,解析的工作就是在这个类中实现的。其中有几个实现的方法 startDocument();startElement(String uri, String localName, String qName,Attributes attributes),characters(char[] ch, int start, int length); endElement();endDocument().对应着解析中的各个步骤。
class PersonSaxXml extends DefaultHandler{
private Person person;
public Person getPerson () {
return person;
}
public void setPerson (Person person) {
this.person=person;
}
//如果返回的数据中有数组
private List<Person > mPerson ;
public List<Person > getMPerson() {
return mPerson ;
}
public void setMPerson(List<Person >mPerson ) {
this.mPerson =mPerson ;
}
private String local;
//文档的开始
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
mPerson = new ArrayList<Person >();
}
//元素开始
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
this.local = localName;
if(local.equalsIgnoreCase("")){
person= new Person();
}
}
//s数据开始
public void characters(char[] ch, int start, int length)
throws SAXException {
if(local!=null){
String data = new String(ch,start,length);
if(local.equalsIgnoreCase("name")){//判断是否为名字的字段
if(data!=null&&!data.equalsIgnoreCase("")){
person.setName(data.trim());
}
}else if(local.equalsIgnoreCase("age")){//是否为年龄
if(data!=null&&!data.equalsIgnoreCase("")){
person.setAge(data.trim());
}
}
}
local = null;
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
if(local.equalsIgnoreCase("list")){//如果是数组,在对象结束的时候加入list中
mPerson.add(person);
}
local =null;
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
}
}
3.第三步,创建sax解析方法:
具体: String xml ="";
StringReader mReader = new StringReader(xml);
` InputSource is = new InputSource(mReader);//创建输入流InputSource
try {
//创建工厂类SAXParserFactory
SAXParserFactory msSaxParserFactory = SAXParserFactory
.newInstance();
//SAXParserFactory 得到SaxParser
SAXParser msSaxParser = msSaxParserFactory.newSAXParser();
//创建上一步中写的解析类
PersonSaxXml saxXml = newPersonSaxXml ();
//得到XMLReader实例
XMLReader msXmlReader = msSaxParser.getXMLReader();
msXmlReader.setContentHandler(saxXml);
msXmlReader.parse(mInputSource);//将解析工具类和输入流注册到XMLReader中
List<Person > mPerson = saxXml.getMPerson();//从解析工具类中得到结果
} catch (Exception e) {
e.printStackTrace();
}
Ok这样sax解析就完成了
- android开发之sax解析xml文档
- Android开发之解析XML-SAX
- Android开发之XML解析——SAX解析XML
- Android开发 --- SAX解析XML
- Android之SAX解析XML
- Android 解析XML 之SAX
- Android之SAX解析XML
- Android之SAX解析XML
- android xml解析之SAX
- Android之SAX解析XML
- Android xml解析之Sax
- Android之SAX解析XML
- Android 开发之路十---------SAX,DOM,PULL解析XML
- Android开发--详解SAX解析XML文件
- android之sax解析xml文件
- Android之SAX解析XML文件
- android之sax解析xml文件
- android之sax解析xml文件 .
- Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性
- uva10910 - Marks Distribution
- 正则表达式
- poj 2828 线段树
- JSP简单练习-省略显示长字符串
- Android开发之解析XML-SAX
- Humidex
- [菜鸟]phpMyadmin修改密码后异常,error1045
- Codeforces Round #FF (Div. 2)
- 制作initramfs根文件系统内核并用其启动最终文件系统
- D3.JS实例,旋转的色彩方块
- layouts简介
- windows驱动开发技术详解 第五章 windows内存管理
- 堆排序详细代码