Andriod应用对XML的解析 推荐
2011-02-26 16:00
309 查看
在Android系统中,对于XML文件的读取主要采用的是SAX方法。SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是W3C标准,但它却是一个得到了广泛认可的API。SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。
常见的事件处理器有三种基本类型:
a. 用于访问XML DTD内容的DTDHandler;
b. 用于低级访问解析错误的ErrorHandler;
c. 用于访问文档内容的ContentHandler,这也是最普遍使用的事件处理器。
因为SAX具有边扫描边读取的特性,无需将整个文件读入内存中,更好的节省了移动设备中的资源。但是这种方法对于操作节点显得略有复杂。
下面以本人在学习中所看过的一个视频教程中的实例,说明Android应用程序对于XML文档的解析过程。
用于开启解析的Activity:
内容处理器:
SAX时间作为驱动的解析模型,需要相应的事件处理函数。SAX将不同的事件处理函数按照类型分不同接口中。对于文件内容的处理函数,在内容处理器接口(ContentHandler)中。
在上面程序中,需要注意,我们并非实现了ContentHandler接口,而是继承了已经实现该接口的DefaultHandler。我再付类中已经实现了接口中所有方法,并将方法实现为空方法,我们继承父类只需要重写那些我们需要的方法即可。
常见的事件处理器有三种基本类型:
a. 用于访问XML DTD内容的DTDHandler;
b. 用于低级访问解析错误的ErrorHandler;
c. 用于访问文档内容的ContentHandler,这也是最普遍使用的事件处理器。
因为SAX具有边扫描边读取的特性,无需将整个文件读入内存中,更好的节省了移动设备中的资源。但是这种方法对于操作节点显得略有复杂。
下面以本人在学习中所看过的一个视频教程中的实例,说明Android应用程序对于XML文档的解析过程。
用于开启解析的Activity:
public class XMLActitity extends Activity { /** Called when the activity is first created. */ private Button parseButton ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); parseButton = (Button)findViewById(R.id.parseButton); parseButton.setOnClickListener(new ParseButtonListener()); } //设定监听器,当点击按钮时,开始进行解析。 class ParseButtonListener implements OnClickListener{ @Override public void onClick(View v) { HttpDownloader hd = new HttpDownloader(); //将网络上的一个XML资源下载并解析成为一个字符串,这里的解析在一个外部类中进行,这里不再列出。 String resultStr = hd.download("http://192.168.1.107:8081/voa1500/test.xml"); System.out.println(resultStr); try{ //下面是解析XML的 //1. 创建一个SAXParserFactory SAXParserFactory factory = SAXParserFactory.newInstance(); //2. 获得一个XMLReader XMLReader reader = factory.newSAXParser().getXMLReader(); //3. 为XMLReader设置内容处理器 reader.setContentHandler(new MyContentHandler()); //4.开始解析文件。注意这个方法的参数,需要是输入流。还有另外一种不同参数,需要时系统内部资源的URI reader.parse(new InputSource(new StringReader(resultStr))); } catch(Exception e){ e.printStackTrace(); } } } } |
SAX时间作为驱动的解析模型,需要相应的事件处理函数。SAX将不同的事件处理函数按照类型分不同接口中。对于文件内容的处理函数,在内容处理器接口(ContentHandler)中。
public class MyContentHandler extends DefaultHandler { String hisname, address, money, sex, status; String tagName; //当开始解析文档时,触发这个函数 public void startDocument() throws SAXException { System.out.println("````````begin````````"); } //当结束解析文档时,触发这个函数 public void endDocument() throws SAXException { System.out.println("````````end````````"); } //当扫描到开始标签时,触发这个函数。 public void startElement(String namespaceURI, String localName, String qName, Attributes attr) throws SAXException { //使用全局变量tagName作为当前正在解析节点的标记。 tagName = localName; if (localName.equals("worker")) { //获取标签的全部属性。标签的所有属性存储在数组中。 for (int i = 0; i < attr.getLength(); i++) { //打印其中某个属性的名称和属性值 System.out.println(attr.getLocalName(i) + "=" + attr.getValue(i)); } } } public void endElement(String namespaceURI, String localName, String qName) throws SAXException { //在workr标签解析完之后,会打印出所有得到的数据 tagName = ""; if (localName.equals("worker")) { this.printout(); } } //当扫描到标签内容时,触发这个函数。标签的内容存储在字符数组中。 public void characters(char[] ch, int start, int length) throws SAXException { //首先判断当前扫描到的标签,然后根据当前标签判断标签内容 if (tagName.equals("name")) hisname = new String(ch, start, length); else if (tagName.equals("sex")) sex = new String(ch, start, length); else if (tagName.equals("status")) status = new String(ch, start, length); else if (tagName.equals("address")) address = new String(ch, start, length); else if (tagName.equals("money")) money = new String(ch, start, length); } private void printout() { System.out.print("name: "); System.out.println(hisname); System.out.print("sex: "); System.out.println(sex); System.out.print("status: "); System.out.println(status); System.out.print("address: "); System.out.println(address); System.out.print("money: "); System.out.println(money); System.out.println(); } } |
相关文章推荐
- eclipse中发布andriod应用时出现Error in an XML file: aborting build解决
- Java眼中的XML--文件读取--1 应用DOM方式解析XML
- Python通过DOM和SAX方式解析XML的应用实例分享
- Java眼中的XML--文件读取--2 应用SAX方式解析XML
- 【慕课笔记】3-1 应用SAX方式解析XML—使用SAX解析XML文件的开始和结束
- Android应用开发之XML文件解析之二
- 如何在QML应用中使用Javascript来解析XML
- 应用 SAX 方式解析 XML
- Cocos2dx---------------- TinyXml 解析 XML(推荐使用rapidxml)
- DOM4J 解析XML字符串应用(测试通过)
- hadoop集群配置方法---mapreduce应用:xml解析+wordcount详解---yarn配置项解析
- Android之简易天气预报小应用(xml解析练手)
- Android应用开发之XML文件解析之二
- Java应用SAX方式解析XML
- Tomcat7 web应用的加载原理 (二) web.xml解析
- python开发_xml.dom_解析XML文档_完整版_博主推荐
- 在Servlet应用中用XML实现数据包装和用XSLT解析数据
- DOM解析XML应用之铃声多多改歌曲名称
- 应用 SAX 方式解析 XML
- Java之dom4j的简单解析和生成xml的应用