




免费预览已结束,剩余3页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文使用SAX来解析XML,在Android里面可以使用SAX和DOM,DOM需要把整个XML文件读入内存再解析,比较消耗内存,而SAX基于事件驱动的处理方式,可以在各节点触发回调函数,不过SAX适合节点结构简单的XML文档,复杂的XML文档在后期的节点深度处理会有点麻烦。本文要解析的test.xml文件如下:view plaincopy to clipboardprint?01. 02. 03. testSAX 04. 05. hellogv 06. /hellogv 07. 08. testSAX hellogv /hellogv 解析如上XML的结果如下: 使用SAX解析,需要定义SAXParserFactory(使应用程序能够配置和获取基于 SAX 的解析器以解析 XML 文档),SAXParser(从各种输入源解析 XML),XMLReader(使用回调函数读取 XML 文档),其中XMLReader是个关键。XMLReader可以为解析XML定义各种回调函数,“条件符合”的时候触发这些回调函数。view plaincopy to clipboardprint?01.SAXParserFactory factory = SAXParserFactory.newInstance(); 02.SAXParser parser = factory.newSAXParser(); 03.XMLReader reader = parser.getXMLReader(); 04.reader.setContentHandler(handler); 05.reader.parse(new InputSource(testSAX.this.getResources() 06. .openRawResource(R.raw.test); SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();XMLReader reader = parser.getXMLReader();reader.setContentHandler(handler);reader.parse(new InputSource(testSAX.this.getResources().openRawResource(R.raw.test); 在这段代码里,XMLReader就调用继承DefaultHandler的SAXHandler。DefaultHandler已实现ContentHandler, DTDHandler, EntityResolver, ErrorHandler等接口,包含常见读取XML的操作,具体请看下面的SAXHandler.java源码。生成XML的结果如下:上图是读取各节点之后,使用XmlSerializer重新组合并输出XML字符串。本文的main.xml代码如下:view plaincopy to clipboardprint?01. 02. 05. 06. 09. 11. 13. 14. SAXHandler.java的源码如下:view plaincopy to clipboardprint?01.package com.testSAX; 02. 03.import java.util.ArrayList; 04.import org.xml.sax.Attributes; 05.import org.xml.sax.SAXException; 06.import org.xml.sax.helpers.DefaultHandler; 07. 08.import android.util.Log; 09. 10.public class SAXHandler extends DefaultHandler 11. private ArrayList keys = new ArrayList();/保存字段名称 12. private ArrayList values = new ArrayList();/保存值 13. Override 14. public void startDocument() throws SAXException 15. super.startDocument(); 16. 17. 18. 19. Override 20. public void endDocument() throws SAXException 21. super.endDocument(); 22. 23. 24. Override 25. public void startElement(String uri, String localName, String qName, 26. Attributes attributes) throws SAXException 27. /保存开始标记 28. keys.add(startTag); 29. values.add(localName); 30. 31. Log.e(startTag,localName); 32. /保存属性值 33. for ( int i = 0; i attributes.getLength(); i+ ) 34. keys.add(Attr); 35. String str=new String2; 36. str0=attributes.getLocalName(i); 37. str1=attributes.getValue(i); 38. values.add(str); 39. Log.e(Attr,str0+=+str1); 40. 41. 42. 43. Override 44. public void endElement(String uri, String localName, String qName) 45. throws SAXException 46. /保存结束标记 47. keys.add(endTag); 48. values.add(localName); 49. Log.e(endTag,localName); 50. 51. 52. Override 53. public void characters(char ch, int start, int length) 54. throws SAXException 55. String value = new String(ch, start, length); 56. value = value.trim(); 57. if (value.length() = 0) 58. return; 59. 60. keys.add(text); 61. values.add(value); 62. Log.e(text,value); 63. 64. 65. public ArrayList GetKeys() 66. 67. return keys; 68. 69. 70. public ArrayList GetValues() 71. 72. return values; 73. 74. 75. 76. package com.testSAX;import java.util.ArrayList;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import android.util.Log;public class SAXHandler extends DefaultHandler private ArrayList keys = new ArrayList();/保存字段名称 private ArrayList values = new ArrayList();/保存值Overridepublic void startDocument() throws SAXException super.startDocument();Overridepublic void endDocument() throws SAXException super.endDocument();Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException /保存开始标记keys.add(startTag);values.add(localName);Log.e(startTag,localName);/保存属性值for ( int i = 0; i attributes.getLength(); i+ )keys.add(Attr);String str=new String2;str0=attributes.getLocalName(i);str1=attributes.getValue(i);values.add(str);Log.e(Attr,str0+=+str1);Overridepublic void endElement(String uri, String localName, String qName)throws SAXException /保存结束标记keys.add(endTag);values.add(localName);Log.e(endTag,localName);Overridepublic void characters(char ch, int start, int length)throws SAXException String value = new String(ch, start, length);value = value.trim();if (value.length() = 0)return;keys.add(text);values.add(value);Log.e(text,value);public ArrayList GetKeys()return keys;public ArrayList GetValues()return values; testSAX.java的源码如下:view plaincopy to clipboardprint?01.package com.testSAX; 02. 03.import java.io.StringWriter; 04. 05.import javax.xml.parsers.SAXParser; 06.import javax.xml.parsers.SAXParserFactory; 07. 08.import org.xml.sax.InputSource; 09.import org.xml.sax.XMLReader; 10.import org.xmlpull.v1.XmlSerializer; 11. 12.import android.app.Activity; 13.import android.os.Bundle; 14. 15.import android.util.Xml; 16.import android.view.View; 17.import android.widget.Button; 18.import android.widget.EditText; 19. 20.public class testSAX extends Activity 21. /* Called when the activity is first created. */ 22. Button btnSAX, btnOutput; 23. EditText memo; 24. SAXHandler handler = new SAXHandler(); 25. 26. 27. Override 28. public void onCreate(Bundle savedInstanceState) 29. super.onCreate(savedInstanceState); 30. setContentView(R.layout.main); 31. btnSAX = (Button) this.findViewById(R.id.btnSAX); 32. btnSAX.setOnClickListener(new ClickEvent(); 33. btnOutput = (Button) this.findViewById(R.id.btnOutput); 34. btnOutput.setOnClickListener(new ClickEvent(); 35. memo = (EditText) this.findViewById(R.id.EditText01); 36. 37. 38. 39. class ClickEvent implements View.OnClickListener 40. 41. Override 42. public void onClick(View v) 43. if (v = btnSAX) /解析XML,并保存标记,属性等值 44. try 45. SAXParserFactory factory = SAXParserFactory.newInstance(); 46. SAXParser parser = factory.newSAXParser(); 47. XMLReader reader = parser.getXM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 殡仪服务与社区公益项目合同
- 车辆抵押权登记及抵押物抵押合同
- 钢管混凝土拱桥泵送压力专题研究
- 地砖施工工艺流程
- 【课件】+弹力+-2024-2025学年人教版(2024)物理八年级下册+
- 智慧园林云平台整体解决方案智慧公园整体解决方案
- 2024年电力负荷控制员(技师)职业鉴定考试题库(含答案)
- 非金属矿业数字化转型
- 2024年高考语文备考之教考结合:新高考现代文阅读Ⅱ题型
- 华为企业培训管理
- QData数据库一体机方案介绍
- 化工仓储管理系统方案
- 2021-2022学年贵州省黔东南州高一下学期期末文化水平测试数学试题【含答案】
- 北师大版小学数学四年级下册《优化》同步练习附答案
- (精心整理)初三数学几何的动点问题专题练习及答案
- 高血压脑出血外科治疗临床路径
- 核电工程施工隐患排查专项培训课件
- Q_SLB0402-2005 产品钢印及标记移植
- 劳动者个人职业健康监护档案(样板)
- 小学数学教师业务能力测试试题
- 空客A320-IPC手册使用介绍
评论
0/150
提交评论