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 }