解析XML格式数据文件
发布时间:2020-12-16 06:08:13 所属栏目:百科 来源:网络整理
导读:Pull解析 使用HttpGet从服务器获得xml的文件 然后调用parseXMLWithPull(response); parseXMLWithPull类 private void parseXMLWithPull (String xmlData){ try { XmlPullParserFactory factory=XmlPullParseFactory.newInstance(); XmlPullParse xmlPullPars
Pull解析使用HttpGet从服务器获得xml的文件 parseXMLWithPull类private void parseXMLWithPull(String xmlData){
try{
XmlPullParserFactory factory=XmlPullParseFactory.newInstance();
XmlPullParse xmlPullParser = factory.newPullParse();
xmlPullParser.setInput(new StringReader(xmlData));
int eventType = xmlPullParser.getEventType();
String id="";
String name ="";
String version="";
while(eventType!=XmlPullParser.END_DOCUMENT){
String nodeName = xmlPullParser.getName();
switch(eventType){
case XmlPullParser.START_TAG:{
if("id".equals(nodeName)){
id=xmlPullParser.nextText();
}else if("name".equals(nodeName)){
name=xmlPullParser.nextText();
}else if ("version".equals(nodeName)){
version=xmlPullParser.nextText();
}
break;
}
//完成解析某个节点
case XmlPullParser.END_TAG:{
if("app".equals(nodeName)){
Log.d("aaa","id is"+id);
Log.d("aaa","name is"+name);
Log.d("aaa","version is"+version);
}
break;
}
default:
break;
}
eventType=xmlPullParse.next();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
SAX解析
首先我们要新建一个类继承DefaultHandler,并重写其中的5个方法。public class MyHandler extends DefaultHandler{
@override
public void startDocument() throws SAXException{
}
@override
public void startElement(String uri,String localName,String qName,Attributes attributes)throws SAXException{
}
@override
publiv void characters(char[] ch,int start,int length)throws SAXException{
}
@override
public void endElement(String uri,String qName)throws SAXException{
}
@override
public void endDocument throws SAXException{
}
}
需要注意的是,在获取结点中内容时,characters()方法可能会被多次调用,一些换行符也被当做内容解析出来,我们需要针对这种情况在代码中做好控制。 示例public class ContentHandler extends DefaultHandler{
private String nodeName;
private StringBuilder id;
private StringBuilder name;
private StringBuilder version;
@override
public void startDocument() throws SAXException{
id=new StringBuilder;
name=new StringBulider;
version=new StringBuilder;
}
@override
public void startElement(String uri,Attributes attributes)throws SAXException{
//记录当前结点名
nodeName=localName;
}
@override
publiv void characters(char[] ch,int length)throws SAXException{
//根据当前的结点名判断将内容添加到哪一个StringBuilder对象中
if("id".equals(nodeName)){
id.append(ch,start,length);
}else if("name".equals(nodeName)){
name.append(ch,length);
}else if("version".equals(nodeName)){
version.append(ch,length);
}
}
@override
public void endElement(String uri,String qName)throws SAXException{
if("app".equals(localName)){
Log.d("content","id is"+id.toString().trim());
Log.d("content","name is"+name.toString().trim());
Log.d("content","version is"+version.toString().trim());
//最后将StringBuilder清空掉
id.setLength(0);
name.setLength(0);
version.setLength(0);
}
@override
public void endDocument throws SAXException{
}
}
在接收到服务器返回的程序中调用parseXMLWithSAX(response);
private void parseXMLWithSAX(String xmlData){
try{
SAXParserFactory factory=SAXParserFactory.newInstance();
XMLReader xmlReader=factory.newSAXParser().getXMLReader();
ContentHandler handler = new ContentHandler();
//将ContentHandler的实例设置到XMLReader中
xmlReader.setContentHandler(handler);
//开始执行解析
xmlReader.parse(new InputSource(new StringReader(xmlData)));
}catch(Exception e){
e.printStackTrace();
}
}
}
在得到了服务器的返回数据后,我们这次调用parseXMLWithSAX()方法来解析XML数据。parseXMLWithSAX()方法中先是创建了一个SAXParserFactory的对象,然后再获取到XMLReader对象,接着将我们编写的ContentHandler的实例设置到XMLReader中,最后调用parse()方法开始执行 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- C语言的isatty函数和ttyname函数以及sendmsg函数用法
- cocos2dx小知识——暂停界面的实现
- ruby-on-rails – Rails 3.0.7 – >你如何让你的测试运行得
- xml之DTD约束
- ruby-on-rails-3 – Stripe:创建客户和/或收费时的错误消息
- dojo小例子(29)FilteringSelect在IE8下对输入法(IME)无
- Cocos2d-x教程(37)-Mac搭建Android开发环境
- 11gR2 rac中用户角色分离及常见oracle bin程序及ASM磁盘权限
- 窥探Swift之基本数据类型
- Cocos2dx lua 3.10版本绑定cjson流程