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&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/&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
可能出现问题:
假如内容中有<任意内容> 或是内容中有& 会报错误。
把其中的"&"转义字符&代替,就OK了 (注意最后还有一个; 分号)
参照:http://blog.csdn.net/zgf1991/article/details/8540212