android:xml的解析值XmlPullParser
来源:互联网 发布:js append html字符串 编辑:程序博客网 时间:2024/06/01 08:58
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
- android:xml的解析值XmlPullParser
- android XmlPullParser解析xml
- android 解析xml -XmlPullParser
- Android-XmlPullParser解析XML
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- android xml解析XmlPullParser的使用
- android xml解析 XmlPullParser的使用
- Android解析XML之XmlPullParser
- Xml、XmlPullparser解析数据Android
- android xml解析之XmlPullParser
- Linux Mint下使用android真机调试
- linux 如何查看硬盘大小,内存大小等系统信息及硬件信息
- glCopyBufferSubData
- 第八周项目四 分数类
- hihocoder #1042 : 跑马圈地
- android:xml的解析值XmlPullParser
- win7去除图标箭头方法
- 第一课:五笔字根
- uva 816 BFS迷宫
- HDU 1251 统计难题
- Eclipse 默认设置的换行长度
- hive sum函数的顶级应用(配合开窗函数OVER)
- zookeeper集群安装
- 中国科技纵横》杂志社 征