zoukankan      html  css  js  c++  java
  • Android 开发工具类 21_SAXForHandler

    解析 XML 有两种形式:

    1、XMLReader

    1 XMLReaser  xmlReader = saxParser.getXMLReader();
    2 xmlReadeer.setContentHandler(hangdler);
    3 xmlREader.pase(new InputSource(is));

    2、SAXParser

    saxParser.parse(is, handler);

    其实 SAXParser 是 JAXP(Java API for XML Processing) 对 XMLReader 的一个封装。

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 import org.xml.sax.Attributes;
     5 import org.xml.sax.SAXException;
     6 import org.xml.sax.helpers.DefaultHandler;
     7 
     8 import android.util.Log;
     9 
    10 import com.wangjialin.domain.Person;
    11 
    12 public class SAXForHandler extends DefaultHandler {
    13     
    14     private static final String TAG = "SAXForHandler"; 
    15     private List<Person> persons;
    16     private String perTag ; // 通过此变量,记录前一个标签的名称。
    17     Person person;  // 记录当前 Person
    18     
    19     public List<Person> getPersons() {
    20         return persons;
    21     }
    22 
    23     // 适合在此事件中触发初始化行为。
    24     public void startDocument() throws SAXException {
    25         persons = new ArrayList<Person>();
    26         Log.i(TAG , "***startDocument()***");
    27     }
    28 
    29     public void startElement(String uri, String localName, String qName,
    30             Attributes attributes) throws SAXException {
    31         
    32         if("person".equals(localName)){
    33             for ( int i = 0; i < attributes.getLength(); i++ ) {
    34                 Log.i(TAG ,"attributeName:" + attributes.getLocalName(i)
    35                         + "_attribute_Value:" + attributes.getValue(i));
    36                 person = new Person();
    37                 person.setId(Integer.valueOf(attributes.getValue(i)));
    38             }
    39         }
    40         perTag = localName;
    41         Log.i(TAG , qName+"***startElement()***");
    42     }
    43     
    44     public void characters(char[] ch, int start, int length) throws SAXException {
    45         
    46         String data = new String(ch, start, length).trim();
    47         if(!"".equals(data.trim())){
    48                Log.i(TAG ,"content: " + data.trim());
    49         }
    50         if("name".equals(perTag)){
    51                 person.setName(data);
    52         }else if("age".equals(perTag)){
    53                 person.setAge(new Short(data));
    54         }
    55     }
    56     
    57     public void endElement(String uri, String localName, String qName) throws SAXException {
    58         
    59         Log.i(TAG , qName + "***endElement()***");
    60         if("person".equals(localName)){
    61             persons.add(person);
    62             person = null;
    63         }
    64         perTag = null;
    65     }
    66 
    67     public void endDocument() throws SAXException {
    68         
    69         Log.i(TAG , "***endDocument()***");
    70     }
    71 }

    Person.java

     1 package com.wangjialin.domain;
     2 
     3 public class Person {
     4     
     5     private Integer id;
     6     private String name;
     7     private Short age;
     8 
     9     public Person(){}
    10     
    11     public Person(Integer id, String name, Short age) {
    12         this.id = id;
    13         this.name = name;
    14         this.age = age;
    15     }
    16     
    17     public Person(String name, Short age) {
    18         this.name = name;
    19         this.age = age;
    20     }
    21     
    22     public Integer getId() {
    23         return id;
    24     }
    25 
    26     public void setId(Integer id) {
    27         this.id = id;
    28     }
    29 
    30     public String getName() {
    31         return name;
    32     }
    33 
    34     public void setName(String name) {
    35         this.name = name;
    36     }
    37 
    38     public Short getAge() {
    39         return age;
    40     }
    41 
    42     public void setAge(Short age) {
    43         this.age = age;
    44     }
    45 
    46     @Override
    47     public String toString() {
    48         return "id=" + id + ",name=" + name+ ",age=" + age;
    49     }
    50     
    51 }

     JUnit 测试

     1 public void testSAXGetPersons() throws Throwable{
     2         
     3         InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wangjialin.xml");
     4         SAXForHandler saxForHandler = new SAXForHandler();
     5         // 获取 SAX 解析器的工厂对象
     6         SAXParserFactory spf = SAXParserFactory.newInstance();
     7         // 创建解析器对象
     8         SAXParser saxParser = spf.newSAXParser();
     9         // 设定解析的文件和自己定义的事件处理器对象
    10         saxParser.parse(inputStream, saxForHandler);
    11         
    12         List<Person> persons = saxForHandler.getPersons();
    13         inputStream.close();
    14         
    15         for(Person person:persons){
    16             Log.i(TAG, person.toString());
    17         }
    18     }

    【参考】

    http://blog.csdn.net/redarmy_chen/article/details/12951649

     

  • 相关阅读:
    关于Xcode的Other Linker Flags
    ios开发――解决UICollectionView的cell间距与设置不符问题
    源码篇:MBProgressHUD
    ios中VRGCalendarView日历控件
    Xcode6与Xcode5中沙盒的变动以及偏好设置目录的变动
    开发者总结的WatchKit App提交技巧
    iOS开发周报-- 第一期
    selective gaussian blur /adaptive-blur
    hader特效——“Barrel Blur”的实现
    OpenCV——径向模糊
  • 原文地址:https://www.cnblogs.com/renzimu/p/4538230.html
Copyright © 2011-2022 走看看