Android SAX 方式解析XML 字符串
移动应用开发中的数据解析和格式转换

移动应用开发中的数据解析和格式转换在移动应用开发过程中,数据解析和格式转换是一个至关重要的环节。
无论是从服务器端获取数据,还是将数据展示给用户,数据的解析和格式转换对于应用的性能和用户体验起着至关重要的作用。
本文将探讨移动应用开发中的数据解析和格式转换的一些常见方法和技术。
一、XML解析XML(可扩展标记语言)是一种用来存储和传输数据的标签语言,在移动应用开发中得到了广泛应用。
XML解析通过解析XML文件,将数据提取出来,方便应用对数据进行处理和展示。
Android平台上的XML解析主要有两种方式:DOM解析和SAX解析。
DOM解析是将整个XML文件加载到内存中,然后以树形结构的方式解析文件。
这种方式适用于文件较小、结构简单的情况,但对于大型XML文件来说,由于需要加载整个XML文件,会消耗较大的内存资源。
SAX解析则是采用事件驱动的方式来解析XML文件,逐行读取文件并触发相应事件来处理数据。
SAX解析在解析大型或复杂的XML文件时更为高效,因为它一次只处理一行数据,不需要将整个文件加载到内存中。
二、JSON解析JSON(JavaScript对象表示法)是一种轻量级的数据交换格式,广泛用于移动应用开发中。
相对于XML,JSON具有更加简洁、易读的结构,解析起来也更加高效。
在移动应用中,可以通过将JSON格式的数据请求服务器获取到的数据进行解析和处理。
在Android平台上,可以使用JSONObject和JSONArray两个类来解析和存储JSON数据。
JSONObject用于解析和处理JSON对象,而JSONArray则用于解析和处理JSON数组。
通过这两个类的方法,可以方便地将JSON格式的数据转换为Java对象,以便在应用中进行处理和展示。
三、数据格式转换在移动应用开发中,经常需要将不同格式的数据进行转换。
例如,将日期的字符串格式转换成日期对象,将数据的单位进行转换等。
Java提供了一些常用的类和方法来实现这些数据格式的转换。
SAXContentHandler解析超大的XML内容

SAXContentHandler解析超大的XML内容Java Sax ContentHandler 解析超大的XML解析超大的XML文件或者文本使用如果用常用的方法,100M的文件可能要1个多小时,甚至于还可能出现内存溢出等问题。
本文介绍ContentHandler解析超大的xml内容,100M的内容1~2秒左右就解析并入库成功1、构造一个ContentHandlerimport java.util.ArrayList;import java.util.List;import org.springframework.util.CollectionUtils;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class RecipientHandler extends DefaultHandler {private List<Recipient> recipients;private List<NameValue> fields;private Recipient recipient;private NameValue field;private TestService testService;private StringBuilder sb = new StringBuilder();public RecipientHandler(T estService testService) {this.testService = testService;}@Overridepublic void startDocument() throws SAXException {recipients = new ArrayList<>();fields = new ArrayList<>();}@Overridepublic void endDocument() throws SAXException {saveRecipients();}@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { sb.delete(0, sb.length()); // 清空sbif('recipients'.equals(qName)) {recipient = new Recipient();} else if('fields'.equals(qName)) {field = new NameValue();}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {if ('recipients'.equals(qName)) {// 将fields整理成recipient对象for (NameValue field : fields) {String name = field.getName();if('name'.equals(name)) {recipient.setName(field.getValue());} else if('create_date'.equals(name)) {recipient.setCreateDate(field.getValue());}}recipients.add(recipient);fields.clear();if (recipients.size() >= 1000) {saveRecipients(); // 保存}} else if('fields'.equals(qName)) {fields.add(field);} else if('id'.equals(qName)){recipient.setId(sb.toString());} else if('name'.equals(qName)){field.setName(sb.toString());} else if('value'.equals(qName)){field.setValue(sb.toString());}}private void saveRecipients() {if(CollectionUtils.isEmpty(recipients) || testService == null) { return;}testService.addRecipients(recipients);recipients.clear();}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {String data = new String(ch, start, length).trim();sb.append(data); // 当文本过大时,可能不能一次取到完整的data值,会分多次获取}}2、使用ContentHandlerXMLReader parser = XMLReaderFactory.createXMLReader();// RecipientHandler 实现了解析数据,并保存到数据库parser.setContentHandler(newRecipientHandler(testService));StringReader stringReader = new StringReader(xmlString);InputSource is = new InputSource(stringReader);is.setEncoding('UTF-8');parser.parse(is);总体代码特别少,SAX一次解析就获取到所有的业务数据。
解析Xml文件的三种方式

解析Xml⽂件的三种⽅式1、Sax解析(simple api for xml) 使⽤流式处理的⽅式,它并不记录所读内容的相关信息。
它是⼀种以事件为驱动的XML API,解析速度快,占⽤内存少。
使⽤回调函数来实现。
1class MyDefaultHander extends DefaultHandler{2private List<Student> list;3private Student student;45 @Override6public void startDocument() throws SAXException {7super.startDocument();8 list=new ArrayList<>();9 }1011 @Override12public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {13super.startElement(uri, localName, qName, attributes);14if(qName.equals("student")){15 student=new Student();1617 }18 preTag=qName;19 }2021 @Override22public void endElement(String uri, String localName, String qName) throws SAXException {23if(qName.equals("student")){24 list.add(student);25 }26 preTag=null;27 }2829 @Override30public void characters(char[] ch, int start, int length) throws SAXException {31if(preTag!=null){32if(preTag.equals("id")){33 student.setId(Integer.parseInt(new String(ch,start,length)));34 }else if(preTag.equals("name")){35 student.setName(new String(ch,start,length));36 }else if(preTag.equals("age")){37 student.setAge(Integer.parseInt(new String(ch,start,length)));38 }39 }40 }41public List<Student> getStudents(){42return list;43 }44 }45public List<Student> sax_parser(){46 List<Student> list=null;47try {48 SAXParser parser= SAXParserFactory.newInstance().newSAXParser();49 InputStream is= getAssets().open("student.xml");50 MyDefaultHander hander=new MyDefaultHander();51 parser.parse(is,hander);52 list= hander.getStudents();53 } catch (ParserConfigurationException e) {54 e.printStackTrace();55 } catch (SAXException e) {56 e.printStackTrace();57 } catch (IOException e) {58 e.printStackTrace();59 }60return list;61 }2、Dom解析 DOM(Document Object Model) 是⼀种⽤于XML⽂档的对象模型,可⽤于直接访问XML⽂档的各个部分。
Android考试题库

一、单选题(共33题,共62分)1、(2分) WebView中可以用来处理js中警示,确认等对话框的是(C)A。
WebSettingsB。
WebViewClientC。
WebChromeClientD。
WebViewChrome2、(2分) Android解析xml的方法中,将整个文件加载到内存中进行解析的是?(C)A、SAXB、PULLC、DOM D 、JSON3、(2分)以下属于调用摄像头硬件的权限的是:( A )A。
〈uses—permission android:name="android.permission。
CAMERA"/〉B。
〈uses-permission android:name=”android。
permission。
MOUNT_UNMOUNT_FILESYSTEMS”/〉C。
〈uses-permission android:name="android。
permission.WRITE_EXTERNAL_STORAGE”/> D。
<uses—permission android:name="android。
permission。
INTERNET"/〉4、(1分)使用Android系统进行拍照用到的类有:(D)A。
SurfaceView B。
SurfaceHolder C.Callback D。
Camera5、(2分)LocationManager获取位置信息的途径下列说法不正确的是(B )A, GPS定位更精确,缺点是只能在户外使用B, NETWORK通过基站和Wi— Fi信号来获取位置信息,速度较慢,耗电较少.C,获取用户位置信息,我们可以使用其中一个,也可以同时使用两个。
D, GPS定位耗电严重,并且返回用户位置信息的速度远不能满足用户需求.6、(2分) 在开发AppWidget窗口小部件时, 需要继承(D)类A,AppWidgetReceiverB,AppWidgetConfigureC,AppWidgetManagerD,AppWidgetProvider7、(4分)在AsyncTask中下列哪个方法是负责执行那些很耗时的后台计算工作的(C)A,runB,executeC,doInBackgroundD,onPostExecute8、(2分)如果希望自定义TabHost标题部分的显示内容需要使用下列哪个方法(B)finalTabHosttabHost = getTabHost();A,tabHost。
Android开发基础(习题卷9)

Android开发基础(习题卷9)说明:答案和解析在试卷最后第1部分:单项选择题,共70题,每题只有一个正确答案,多选或少选均不得分。
1.[单选题]请阅读下列代码:private String strPara; private void initData() { Intent mIntent = getIntent(); strPara = mIntent.getStringExtra("user"); mTextView2.setText("第一个Activity传递的参数user:"+strPara); }?initData()函数的作用是什么?A)处理第一个Activity的运行数据B)处理第一个Activity传递给第二个Activity的运行数据C)处理第二个Activity的运行数据D)处理第二个Activity传回给第一个Activity的运行数据2.[单选题]Android Activity 生命周期中调用的第一个方法是? ()A)onInit()B)onStart()C)onCreate()D)onBegin()3.[单选题]setResultData()方法的作用是( );A)修改广播接收者的数据B)修改数据并往下传递C)设置广播接收者的数据D)以上都不对4.[单选题]关于Socket 通讯正确的是( )A)服务器端需要ServerSocket 需要绑定端口号B)服务器端需要ServerSocket 需要绑定端口号和IP 地址C)客户端需要Socket ,需要绑定端口号D)客户端需要ServerSocket ,需要绑定端口号5.[单选题]ImageView的视图中,如何设置图片的类型才能使图片位于视图中间(只压不拉)?( )A)FIT_CENTERB)FIT_XYC)CENTERD)CENTER_INSIDE6.[单选题]Android 中不是SAX方式解析xml 需要用的类是( )A)SAXParserFactoryB)XMLReaderC)PullParserD)DefaultHandler7.[单选题]在下列选项中,联系人信息内容提供者的主机名是( )A)contactB)com.android.contactsC)com.android.provider.contactD)com.android.provider.contacts8.[单选题]android 中下列属于Intent 的作用的是()A)实现应用程序间的数据共享B)是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失C)可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带D)处理一个应用程序整体性的工作9.[单选题]下列( )属于Andriod 开发语言的复合数据类型A)无符号整数类型B)联合类型C)接口D)整型10.[单选题]故事课上小花指出刘老师某个故事情节的错误。
Androidstrings.xml中定义字符串显示空格

Androidstrings.xml中定义字符串显⽰空格<string name="str">字 符 串</string>其中  就表⽰空格。
如果直接在⾥⾯键⼊空格,⽆论多少空格都只会显⽰⼀个。
⽤的XML转义字符记录如下:空格: <string name="out_bound_submit">出  库</string> 其中的 就代表空格换⾏: <string name="hello_world">你好!\n世界!</string> 其中的\n就代表换⾏缩进: <string name="hello_world">你好!\t世界!</string> 其中的\t就代表按⼀次Tab键的⼏个空格应当注意,由于系统定义的基本的缩进的格数不同,有的代表4个半⾓字符,有的代表8个半⾓字符,所以可能显⽰时效果不同,建议如果编写界⾯时尽量少⽤。
" : " 或 "' : ' 或 '& : & 或 &lt(<) : < 或 <gt(>) : > 或 >项⽬中要在string.xml 中显⽰特殊符号、如@号冒号等、直接写肯定不⾏啦只能考虑使⽤ASCII码进⾏显⽰、在XML中空格符不是⽤HMTL中的表⽰、⽽是⽤编码表⽰以下为常见的ASCII⼗进制交换编码:@ 对应 -----@-----: 对应 -----:-----  对应 -----空格-----  对应 -----空格-----! 对应 -----!-----" 对应 -----"(xml中需要在前⾯加⼊)-----# 对应 -----#-----$ 对应 -----$-----% 对应 -----%-----& 对应 -----&-----' 对应 -----´-----( 对应 -----(-----) 对应 -----)-----* 对应 -----*-----+ 对应 -----+-----, 对应 -----,------ 对应 -----------. 对应 -----.-----/ 对应 -----/-----: 对应 -----:-----; 对应 -----;-----< 对应 -----<-----= 对应 -----=-----` 对应 -----`-----{ 对应 -----{-----| 对应 -----|-----} 对应 -----}-----~ 对应 -----~-----  对应 -----(这边是空格,在xml⾸字符中不会被忽略)-----¡ 对应 -----¡-----¢ 对应 -----¢-----£ 对应 -----£-----¤ 对应 -----¤-----¥ 对应 -----¥-----¦ 对应 -----¦-----§ 对应 -----§-----¨ 对应 -----¨-----© 对应 -----©-----ª 对应 -----ª-----« 对应 -----«-----¬ 对应 -----¬-----­ 对应 ----------® 对应 -----®-----¯ 对应 -----¯-----° 对应 -----°-----± 对应 -----±-----² 对应 -----²-----³ 对应 -----³-----´ 对应 -----´-----µ 对应 -----µ-----¶ 对应 -----¶-----· 对应 -----•-----¸ 对应 -----¸-----¹ 对应 -----¹-----º 对应 -----º-----» 对应 -----»-----¼ 对应 -----¼-----½ 对应 -----½-----¾ 对应 -----¾-----¿ 对应 -----¿-----À 对应 -----À-----Á 对应 -----Á----- 对应 -----Â-----à 对应 -----Ã-----Ä 对应 -----Ä-----Å 对应 -----Å-----Æ 对应 -----Æ-----Ç 对应 -----Ç-----È 对应 -----È-----É 对应 -----É-----Ê 对应 -----Ê-----Ë 对应 -----Ë-----Ì 对应 -----Ì-----Í 对应 -----Í-----Î 对应 -----Î-----Ï 对应 -----Ï-----Ð 对应 -----Ð-----Ñ 对应 -----Ñ-----Ò 对应 -----Ò-----Ó 对应 -----Ó-----Ô 对应 -----Ô-----Õ 对应 -----Õ-----Ö 对应 -----Ö-----ß 对应 -----ß-----à 对应 -----à-----á 对应 -----á-----â 对应 -----â-----ã 对应 -----ã-----ä 对应 -----ä-----å 对应 -----å-----æ 对应 -----æ-----ç 对应 -----ç-----è 对应 -----è-----é 对应 -----é-----ê 对应 -----ê-----ë 对应 -----ë-----ì 对应 -----ì-----í 对应 -----í-----î 对应 -----î-----ï 对应 -----ï-----ð 对应 -----ð-----ñ 对应 -----ñ-----ò 对应 -----ò-----ó 对应 -----ó-----ô 对应 -----ô-----õ 对应 -----õ-----ö 对应 -----ö-----÷ 对应 -----÷-----ø 对应 -----ø-----ù 对应 -----ù-----ú 对应 -----ú-----û 对应 -----û-----ü 对应 -----ü-----ý 对应 -----ý-----þ 对应 -----þ-----ÿ 对应 -----ÿ-----Ā 对应 -----Ā-----ā 对应 -----ā-----Ă 对应 -----Ă-----ă 对应 -----ă-----Ą 对应 -----Ą-----ą 对应 -----ą-----Ć 对应 -----Ć-----ć 对应 -----ć-----Ĉ 对应 -----Ĉ-----ĉ 对应 -----ĉ-----Ċ 对应 -----Ċ-----ċ 对应 -----ċ-----Č 对应 -----Č-----č 对应 -----č-----Ď 对应 -----Ď-----ď 对应 -----ď-----Đ 对应 -----Đ-----đ 对应 -----đ-----Ē 对应 -----Ē-----ē 对应 -----ē-----Ĕ 对应 -----Ĕ-----ĕ 对应 -----ĕ-----Ė 对应 -----Ė-----ė 对应 -----ė-----Ę 对应 -----Ę-----ę 对应 -----ę-----Ě 对应 -----Ě-----ģ 对应 -----ģ-----Ĥ 对应 -----Ĥ-----ĥ 对应 -----ĥ-----Ħ 对应 -----Ħ-----ħ 对应 -----ħ-----Ĩ 对应 -----Ĩ-----ĩ 对应 -----ĩ-----Ī 对应 -----Ī-----ī 对应 -----ī-----Ĭ 对应 -----Ĭ-----ĭ 对应 -----ĭ-----Į 对应 -----Į-----į 对应 -----į-----İ 对应 -----İ-----ı 对应 -----ı-----IJ 对应 -----IJ-----ij 对应 -----ij-----Ĵ 对应 -----Ĵ-----ĵ 对应 -----ĵ-----Ķ 对应 -----Ķ-----ķ 对应 -----ķ-----ĸ 对应 -----ĸ-----Ĺ 对应 -----Ĺ-----ĺ 对应 -----ĺ-----Ļ 对应 -----Ļ-----ļ 对应 -----ļ-----Ľ 对应 -----Ľ-----ľ 对应 -----ľ-----Ŀ 对应 -----Ŀ-----ŀ 对应 -----ŀ-----Ł 对应 -----Ł-----ł 对应 -----ł-----Ń 对应 -----Ń-----ń 对应 -----ń-----Ņ 对应 -----Ņ-----ņ 对应 -----ņ-----Ň 对应 -----Ň-----ň 对应 -----ň-----ʼn 对应 -----ʼn-----Ŋ 对应 -----Ŋ-----ŋ 对应 -----ŋ-----Ō 对应 -----Ō-----ō 对应 -----ō-----Ŏ 对应 -----Ŏ-----ŏ 对应 -----ŏ-----Ő 对应 -----Ő-----ő 对应 -----ő-----Œ 对应 -----Œ-----œ 对应 -----œ-----Ŕ 对应 -----Ŕ-----ŕ 对应 -----ŕ-----Ŗ 对应 -----Ŗ-----ŗ 对应 -----ŗ-----Ř 对应 -----Ř-----ř 对应 -----ř-----Ś 对应 -----Ś-----ś 对应 -----ś-----Ŝ 对应 -----Ŝ-----ŝ 对应 -----ŝ-----Ş 对应 -----Ş-----ŧ 对应 -----ŧ-----Ũ 对应 -----Ũ-----ũ 对应 -----ũ-----Ū 对应 -----Ū-----ū 对应 -----ū-----Ŭ 对应 -----Ŭ-----ŭ 对应 -----ŭ-----Ů 对应 -----Ů-----ů 对应 -----ů-----Ű 对应 -----Ű-----ű 对应 -----ű-----Ų 对应 -----Ų-----ų 对应 -----ų-----Ŵ 对应 -----Ŵ-----ŵ 对应 -----ŵ-----Ŷ 对应 -----Ŷ-----ŷ 对应 -----ŷ-----Ÿ 对应 -----Ÿ-----Ź 对应 -----Ź-----ź 对应 -----ź-----Ż 对应 -----Ż-----ż 对应 -----ż-----Ž 对应 -----Ž-----ž 对应 -----ž-----⽂章出处:/itshare_205.html。
xml文件解析方法

xml文件解析方法XML文件解析方法引言:XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它具有良好的可读性和灵活性,被广泛应用于数据交换和配置文件等领域。
在处理XML文件时,解析是必不可少的环节。
本文将介绍几种常用的XML文件解析方法,包括DOM、SAX和StAX。
一、DOM解析方法DOM(文档对象模型)是一种将整个XML文件以树形结构加载到内存中的解析方法。
DOM解析器将XML文件解析为一个树状结构,通过遍历节点来获取和操作XML文件中的数据。
DOM解析方法的优点是易于理解和使用,可以随机访问XML文件中的任意节点,但缺点是占用内存较大,不适用于大型XML文件的解析。
1. 创建DOM解析器对象:使用标准的Java API,可以通过DocumentBuilderFactory类来创建DOM解析器对象。
2. 加载XML文件:通过DOM解析器对象的parse()方法加载XML文件,将其转化为一个树形结构。
3. 遍历节点:使用DOM解析器对象提供的方法,如getElementsByTagName()、getChildNodes()等,可以遍历XML文件中的各个节点,获取节点的名称、属性和文本内容等信息。
4. 获取节点数据:通过节点对象提供的方法,如getNodeName()、getTextContent()等,可以获取节点的名称和文本内容。
二、SAX解析方法SAX(简单API for XML)是一种基于事件驱动的XML解析方法。
在SAX解析过程中,解析器顺序读取XML文件,当遇到节点开始、节点结束或节点文本等事件时,会触发相应的回调方法。
相比于DOM 解析方法,SAX解析方法具有内存占用小、解析速度快的优点,但缺点是无法随机访问XML文件中的节点。
1. 创建SAX解析器对象:使用标准的Java API,可以通过SAXParserFactory类来创建SAX解析器对象。
2. 实现事件处理器:自定义一个事件处理器,实现SAX解析器提供的DefaultHandler类,并重写相应的回调方法,如startElement()、endElement()和characters()等。
SAX解析器解析xml详解

XML的解析器原理及性能比较,SAX详解1 DOMDOM 是用与平台和语言无关的方式表示XML 文档的官方W3C 标准。
DOM 是以层次结构组织的节点或信息片断的集合。
这个层次结构允许开发人员在树中寻找特定信息。
分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。
由于它是基于信息层次的,因而DOM 被认为是基于树或基于对象的。
DOM 以及广义的基于树的处理具有几个优点。
首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。
它还可以在任何时候在树中上下导航,而不是像SAX 那样是一次性的处理。
DOM 使用起来也要简单得多。
另一方面,对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。
这些基于事件的模型,比如SAX。
2 SAX这种处理的优点非常类似于流媒体的优点。
分析能够立即开始,而不是等待所有的数据被处理。
而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。
这对于大型文档来说是个巨大的优点。
事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。
一般来说,SAX 还比它的替代者DOM 快许多。
3 选择DOM 还是选择SAX ?对于需要自己编写代码来处理XML 文档的开发人员来说,选择DOM 还是SAX 解析模型是一个非常重要的设计决策。
DOM 采用建立树形结构的方式访问XML 文档,而SAX 采用的事件模型。
DOM 解析器把XML 文档转化为一个包含其内容的树,并可以对树进行遍历。
用DOM 解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。
可以很容易的添加和修改树中的元素。
然而由于使用DOM 解析器的时候需要处理整个XML 文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML 文件的时候。
由于它的遍历能力,DOM 解析器常用于XML 文档需要频繁的改变的服务中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这个是主类:
import java.io.StringReader;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class ParsingXML extends Activity {
private final String MY_DEBUG_TAG = "WeatherForcaster";
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
TextView tv = new TextView(this);
String xml = "<VCOM version='1.1'><loginlink>aHR0cDovLzE5Mi4xNjguMTA0LjExMy9ldW1zL2NsaWV udC90ZW1 wbGF0ZTIwMDA vbW9iaWxlZW50cnkucGhwP3VzZXJuYW1lPWNlc2hp</loginlink><errmsg ></errmsg></VCOM>";
// 创建一个新的字符串
StringReader read = new StringReader(xml);
// 创建新的输入源SAX 解析器将使用InputSource 对象来确定如何读取XML 输入
InputSource source = new InputSource(read);
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
ExampleHandler myExampleHandler = new ExampleHandler();
xr.setContentHandler(myExampleHandler);
xr.parse(source);
ParsedExampleDataSet parsedExampleDataSet = myExampleHandler
.getParsedData();
String url=Base64Coder.decodeString(parsedExampleDataSet.toString());
tv.setText(url);
} catch (Exception e) {
tv.setText("Error: " + e.getMessage());
Log.e(MY_DEBUG_TAG, "WeatherQueryError", e);
}
this.setContentView(tv);
}
}
下面两个类是以SPX 方式解析XML字符串
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ExampleHandler extends DefaultHandler{
private boolean in_mytag = false;
private ParsedExampleDataSet myParsedExampleDataSet = new ParsedExampleDataSet();
public ParsedExampleDataSet getParsedData() {
return this.myParsedExampleDataSet;
}
public void startDocument() throws SAXException {
this.myParsedExampleDataSet = new ParsedExampleDataSet();
}
public void endDocument() throws SAXException {
}
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts) throws SAXException {
if (localName.equals("loginlink")) {
this.in_mytag = true;
}
}
public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
if (localName.equals("loginlink")) {
this.in_mytag = false;
}
}
public void characters(char ch[], int start, int length) {
if(this.in_mytag){
myParsedExampleDataSet.setExtractedString(new String(ch, start, length));
}
}
}
public class ParsedExampleDataSet {
private String extractedString = null;
public String getExtractedString() {
return extractedString;
}
public void setExtractedString(String extractedString) { this.extractedString = extractedString;
}
public String toString(){
return "ExtractedString = " + this.extractedString ;
}
}。