Android之SAX解析XML

原创 2013年12月04日 15:11:58

     这几天想复习一下网络编程 ,  就下了一本Android4.0网络编程 ,这本书基本上全都是讲网络编程的(废话)  , 还是不错的 推荐一下 .但是看了SAX解析xml那章一下感觉讲的不大明白 , 借此补种以下 顺便打个笔记 .

<?xml version="1.0" encoding="utf-8"?>
<persons>
    <person id="0001">
        <name>jialin</name>
        <age>24</age>
    </person>
     <person id="0002">
        <name>xiaolu</name>
        <age>23</age>
    </person>
<persons>

1.xml文件必须包含跟元素

2.xml必须有关闭标签

3 .xml文件对大小写敏感

4.xml文件必须有正确的嵌套

5. xml文件属性值加引号(双单均可)

6.这些东西是要引用滴

&lt; < 小于
&gt; > 大于
&amp; & 和号
&apos; ' 单引号
&quot; " 引号
7.信息像数据 , 用元素 , 信息像数据的属性 , 用属性 (最好都用元素)

 如果是带命名空间的元素<nsp:person id="0001" what="1"></nsp:person>  

 startElement()方法里传递一个String localName,这个localName在开始解析person元素的时候 ,  就是"person" ,  

 还有一个String qName ,   这个qName在Android的SAX解析里就是 "nsp:person"   ,  带命名空间的标签名

uri 就是命名空间 nsp:

attributes 参数 id="0001" 属性和属性的值  , attributes.getLocalName(i) 获得的是"id"  attributes.getValue(i) 获得的是"0001"

 如果要解析这个xml , 总体的思路是  :

类的属性 :  ArrayList<Person> persons ,  Person person,  String perTag (当前解析的标签)

1.StartDocuments()开始解析这个xml的时候的时候, new一个ArrayList<Person>

2.如果解析到person标签 , 也就是"person".equals(localName)  , (这样写的原因是为了避免空指针异常) , new 一个Person .

3.获取它的属性和属性值,  利用set方法添加到Person中 .

4.让perTag = localName .  这样在characters()方法里就可以知道 当前解析到哪个标签了

5.运行到文本内容了 , 回调 characters()方法 , 用String data = new String(ch, start, length).trim(); 这个构造方法来获得数据, 然后 调用trim()方法过滤调里面的空格

6.判断现在运行到哪个标签 .  if("name".equals(perTag)) 就是运行到name标签了,  需要做的是用set方法把 data 添加到person中 .

7.遇到了一个标签的关闭 . 回调endElement()方法,     这时候判断是哪个标签的结尾 ,    , 如果 "person".equals(localName) 这个是person的结尾 , 1. 需要把解析好的person放

入到ArrayList<Person> 中 , 2 把Person=null  .   最后为了安全不管是什么标签结尾 , 都要让perTag=null .

8.到endDocument()就处理你爱处理的事吧

 今天懒了 , 先写到这里 明天继续  =  =!

 然后是怎么用

  InputStream is = MainActivity.class.getClassLoader().getResourceAsStream("persons.xml");
  XMLHandler handler = new XMLHandler();
  SAXParserFactory parserFactory = SAXParserFactory.newInstance();
  SAXParser parser = parserFactory.newSAXParser();
  parser.parse(is, handler);
  List<Person> list = handler.getPersons();
  is.close();
  return list;

如果不好记的话 记着一个就行了 SAXParser.parse(InputSteam , DefaultHandler) ;

InputStream 从网络, 外部存储..  都行

DefaultHanlder  XMLHanlder的子类

至于怎么获得这个SAXParser , 是用一个工厂模式获得的 , 先获得这个工厂 , 在从工厂获得这个单例 , 就OK了 .

SAXParserFactory parserFactory = SAXParserFactory.newInstance();
SAXParser parser = parserFactory.newSAXParser();

最后不要忘了关闭流哦 .



 

android使用SAX解析xml

  • 2014年08月24日 22:46
  • 10KB
  • 下载

android 以SAX方式解析xml

  • 2016年03月09日 17:11
  • 2.48MB
  • 下载

Android开发:XML简介&DOM、PULL、SAX解析对比

史上最全的Android关于XML的简介&DOM、PULL、SAX解析对比

Android XML解析之SAX解析

  • 2015年08月26日 21:19
  • 53KB
  • 下载

android入门级解析xml SAX

  • 2014年05月02日 17:35
  • 54KB
  • 下载

[Android]四种方式解析字符串----JSON、SAX、DOM、XML

当是练习吧,分别以JSON、SAX、DOM、XML(android.util.XML)来解析字符串。 个人感觉这四种方式的实现由难到易的顺序是:SAX→XML→DOM→JSON。   JSON解...

Android中XML的解析Pull//SAX/DOM

  • 2016年05月02日 16:24
  • 1.91MB
  • 下载

android开发(十八) SAX解析XML文件实例

SAX(Simple API for XML),是指一种接口,或者一个软件包。  DOM:文档驱动。DOM在解析文件之前把整个文档装入内存,处理大型文件时其性能很差,是由于DOM的树结构所造成的...

android sax解析xml文件

  • 2015年11月03日 16:43
  • 2.48MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android之SAX解析XML
举报原因:
原因补充:

(最多只允许输入30个字)