android-文件解析-<八>

1.SAX

   全称simple api for xml,即是一种接口,也是一个软件包,作为接口,SAX是事件驱动型XML解析的一个标准接口.

  它是扫描一行的xml,并解析它,再扫描下一行并解析。

2.SAX的原理  

     

  

3.SAX实现读取一个字符串(内容为从网络下载后写入的字符)的代码步骤。

   1.获取XMLReader:

        //创建一个SAXParserFactory
       SAXParserFactory factory = SAXParserFactory.newInstance();
       XMLReader reader = factory.newSAXParser().getXMLReader();

   2.为XMLReader 设置内容处理器。(该内容处理器类需要用另一个类继承重写里面的方法)

//为XMLReader设置内容处理器
 reader.setContentHandler(new MyContentHandler());
             

   3.开始解析文件(用xmlreader的parse方法)

 //开始解析文件,resultStr就是我们要解析的字符串
 reader.parse(new InputSource(new StringReader(resultStr)));

4.ContentHandler类(内容处理器)

 1 //这里继承DefaultHandler,而不是ContentHandler原因是
 2 //采用了适配器模式,我们需要用到ContentHandler某些方法
 3 //不需要其他多余的方法,而DefaultHandler刚好给我们常用需要的方法,没有多余方法
 4 public class MyContentHandler extends DefaultHandler {
 5     String hisname, address, money, sex, status;
 6     String tagName;
 7 
 8     public void startDocument() throws SAXException {
 9         System.out.println("````````begin````````");
10     }
11 
12     public void endDocument() throws SAXException {
13         System.out.println("````````end````````");
14     }
15 
16     public void startElement(String namespaceURI, String localName,
17             String qName, Attributes attr) throws SAXException {
18         tagName = localName;
19         if (localName.equals("worker")) {
20             //获取标签的全部属性
21             for (int i = 0; i < attr.getLength(); i++) {
22                 System.out.println(attr.getLocalName(i) + "=" + attr.getValue(i));
23             }
24         }
25     }
26 
27     public void endElement(String namespaceURI, String localName, String qName)
28             throws SAXException {
29         //在workr标签解析完之后,会打印出所有得到的数据
30         tagName = "";
31         if (localName.equals("worker")) {
32             this.printout();
33         }
34     }
35     public void characters(char[] ch, int start, int length)
36             throws SAXException {
37         if (tagName.equals("name"))
38             hisname = new String(ch, start, length);
39         else if (tagName.equals("sex"))
40             sex = new String(ch, start, length);
41         else if (tagName.equals("status"))
42             status = new String(ch, start, length);
43         else if (tagName.equals("address"))
44             address = new String(ch, start, length);
45         else if (tagName.equals("money"))
46             money = new String(ch, start, length);
47     }
48 
49     private void printout() {
50         System.out.print("name: ");
51         System.out.println(hisname);
52         System.out.print("sex: ");
53         System.out.println(sex);
54         System.out.print("status: ");
55         System.out.println(status);
56         System.out.print("address: ");
57         System.out.println(address);
58         System.out.print("money: ");
59         System.out.println(money);
60         System.out.println();
61     }
62 
63 }

 

posted @ 2015-02-16 09:17  beyondbycyx  阅读(122)  评论(0编辑  收藏  举报