android:xml的解析值XmlPullParser

XmlPullParser, 它是在Android上一个高效且可维护的解析XML方法。 Android 上有个接口的实现方式:
KXmlParser, 通XmlPullParserFactory.newPullParser())得到.
ExpatPullParser
, 通Xml.newPullParser())得到.
选择都是比好的。 下面的示例中是使用ExpatPullParser, 通Xml.newPullParser()得到.


step1:创建xml文件target.xml

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.baidu.com">
    <entry>
        <id>http://stackoverflow.com</id>
        <title type="text">where is my data file</title>
    <category scheme="http://stackoverflow.com/feeds/tag?tagnames=android&amp;sort=newest/tags" term="file"></category>
<author>
<name>cliff2310</name>
<uri>http://stackoverflow.com/users/1128925</uri>
</author>
<link rel="alternate" href="http://stackoverflow.com/questions/&amp;9439999/where-is-my-data-file"/>
<published>2012-02-25T00:0:54Z</published>
<updated>2012-02-25T00:30:54Z</updated>
<summary type="html">
<p>have an Application that requires a data file</p>
</summary>
    </entry>
</feed>


step2:创建解析器

package com.example.xmlparser;


import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;


import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;


import android.util.Xml;


public class XmlParser {
private static String ns = null;

public List parse(InputStream in) throws XmlPullParserException,IOException{
try{
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in, null);
parser.nextTag();
return readFeed(parser);
}finally{
if(in != null)
in.close();
}
}

//解析feed节点
public List readFeed(XmlPullParser parser) throws XmlPullParserException,IOException{
ArrayList entrys = new ArrayList();
parser.require(XmlPullParser.START_TAG, ns, "feed");
while(parser.next() != XmlPullParser.END_TAG){
if(parser.getEventType() != XmlPullParser.START_TAG)
continue;
String name = parser.getName();

if(name.equals("entry"))
entrys.add(readEntry(parser)); //解析entry节点
else
skip(parser);
}
return entrys;
}

//解析entry节点
public Entry readEntry(XmlPullParser parser) throws XmlPullParserException,IOException{
parser.require(XmlPullParser.START_TAG, ns, "entry");
String title = null;
String link = null;
String summary = null;
while(parser.next() != XmlPullParser.END_TAG){
if(parser.getEventType() != XmlPullParser.START_TAG)
continue;
String name = parser.getName();
if(name.equals("title"))
title = readTitle(parser); //解析title子节点
else if(name.equals("link"))
link = readLink(parser); //解析link子节点
else if(name.equals("summary"))
summary = readSummary(parser); //解析summary子节点
else
skip(parser); //跳过该节点
}
return new Entry(title,link,summary);
}

//解析summary子节点
private String readSummary(XmlPullParser parser) throws XmlPullParserException,IOException{
parser.require(XmlPullParser.START_TAG, ns, "summary");
String summary=null;
while(parser.next() != XmlPullParser.END_TAG){
if(parser.getEventType() != XmlPullParser.START_TAG)
continue;
String name = parser.getName();
if(name.equals("p")){
parser.require(XmlPullParser.START_TAG, ns, "p");
summary = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "p");
}
}
//parser.require(XmlPullParser.END_TAG, ns, "summary");
return summary;
}

//解析link子节点
private String readLink(XmlPullParser parser) throws XmlPullParserException,IOException{
parser.require(XmlPullParser.START_TAG, ns, "link");
String link = "";
String relType = parser.getAttributeValue(null, "rel");
if(relType.equals("alternate")){
link = parser.getAttributeValue(null, "href");
parser.nextTag();
}
parser.require(XmlPullParser.END_TAG, ns, "link");
return link;
}


//解析title子节点
private String readTitle(XmlPullParser parser) throws XmlPullParserException,IOException{
parser.require(XmlPullParser.START_TAG, ns, "title");
String title = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "title");
return title;
}

//读取文本节点数据
private String readText(XmlPullParser parser) throws XmlPullParserException,IOException{
String result = "";
if(parser.next() == XmlPullParser.TEXT)
{
result = parser.getText();
parser.nextTag();
}
return result;
}


//跳过节点
public void skip(XmlPullParser parser) throws XmlPullParserException,IOException{
if(parser.getEventType() != XmlPullParser.START_TAG)
throw new IllegalStateException();
int depath = 1;
while(depath != 0){
switch(parser.next()){
case XmlPullParser.START_TAG:
depath++;
break;
case XmlPullParser.END_TAG:
depath--;
break;
}
}
}
}


stp3:activity中获取target.xml对应的输入流

InputStream in = this.getClass().getClassLoader().getResourceAsStream("com/example/xmlparser/target.xml");

注意:此处注意url的路径写法,

可参照http://www.cnblogs.com/yejg1212/p/3270152.html


可能出现问题:

 假如内容中有<任意内容> 或是内容中有& 会报错误。

把其中的"&"转义字符&amp;代替,就OK了  (注意最后还有一个; 分号)

参照:http://blog.csdn.net/zgf1991/article/details/8540212


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值