android 解析XML 工具类
/**
* Created by John on 2016/3/29.
*/
public class XmlParser {
private static final String ns = null; /**
* 创建一个解析器
* @param is 传入数据的输入流
* @return 返回一个装有entry标签的arraylist
* @throws XmlPullParserException 抛出异常
* @throws IOException 抛出异常
*/
public List parse(InputStream is) throws XmlPullParserException, IOException {
try {
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(is, null);
parser.nextTag();
return readFeed(parser);
} finally {
is.close();
}
} /**
* 获取一个feed标签
* @param parser 传入解析器
* @return 返回一个List,将所有的entry字段封装在里面
* @throws IOException 抛出异常
* @throws XmlPullParserException 抛出异常
*/
private List readFeed(XmlPullParser parser) throws IOException, XmlPullParserException {
List entries = new ArrayList();
parser.require(XmlPullParser.START_TAG,ns,"feed");
while(parser.next() != XmlPullParser.END_TAG){
continue;
}
String name = parser.getName();
if (name.equals("entry")){
entries.add(readEntry(parser));
}else {
skip(parser);
}
return entries;
} /**
* 获取entry标签
* @param parser 传入解析器
* @return 返回一个Entry数据,传入实体类以便于使用
* @throws IOException 抛出异常
* @throws XmlPullParserException 抛出异常
*/
private Entry readEntry(XmlPullParser parser) throws IOException, XmlPullParserException {
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);
}else if (name.equals("link")){
link = readLink(parser);
}else if(name.equals("summary")){
summary = readSummary(parser);
}else {
skip(parser);
}
}
return new Entry(title,summary,link);
} /**
* 获取summary标签
* @param parser 传入解析器
* @return 返回一个标签
* @throws IOException 抛出异常
* @throws XmlPullParserException 抛出异常
*/
private String readSummary(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG,ns,"summary");
String summary = readText(parser);
parser.require(XmlPullParser.END_TAG,ns,"summary");
return summary;
} /**
* 获取link标签
* @param parser 传入解析器
* @return 返回一个link标签
* @throws IOException 抛出异常
* @throws XmlPullParserException 抛出异常
*/
private String readLink(XmlPullParser parser) throws IOException, XmlPullParserException {
String link = "";
parser.require(XmlPullParser.START_TAG,ns,"link");
String tag = parser.getName();
String relType = parser.getAttributeValue(null,"rel");
if (tag.equals("link")){
if (relType.equals("alternate")){
link = parser.getAttributeValue(null,"href");
parser.nextTag();
}
}
parser.require(XmlPullParser.END_TAG,ns,"link");
return link;
} /**
* 获取title标签
* @param parser 传入解析器
* @return 返回一个标签
* @throws IOException 抛出异常
* @throws XmlPullParserException 抛出异常
*/
private String readTitle(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG,ns,"title");
String title = readText(parser);
parser.require(XmlPullParser.END_TAG,ns,"title");
return title;
} /**
* 获取标签中的文本
* @param parser 传入解析器
* @return 返回一个字符串
* @throws IOException 抛出异常
* @throws XmlPullParserException 抛出异常
*/
private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
String result = "";
if (parser.next() == XmlPullParser.TEXT){
result = parser.getText();
parser.nextTag();
}
return result;
} /**
* 跳过不需要的标签
* @param parser 传入解析工具parser
* @throws XmlPullParserException 抛出异常
* @throws IOException 抛出异常
*/
private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
if (parser.getEventType() != XmlPullParser.START_TAG){
// throw new IllegalStateException();
}
int depth = 1;
while (depth != 0){
switch (parser.next()){
case XmlPullParser.END_TAG:
depth --;
break;
case XmlPullParser.START_TAG:
depth ++;
break;
}
}
} /**
* 创建一个Entry实体类
*/
public static class Entry{
public final String title;
public final String link;
public final String summary; private Entry(String title, String summary, String link) {
this.title = title;
this.summary = summary;
this.link = link;
}
}
}
这是一个简单的工具类,如果需要获取其他字段也可以自己添加~!
android 解析XML 工具类的更多相关文章
- jaxb解析xml工具类
[quote]jaxb jdk 自带的解析xml的一种方式支持,只需要用注解对javabean进行数据绑定[/quote] package com.nnk.flowrecharge.common;im ...
- android解析xml文件的方式
android解析xml文件的方式 作者:东子哥 ,发布于2012-11-26,来源:博客园 在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xm ...
- 一个使用命令行编译Android项目的工具类
一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...
- android解析XML总结(SAX、Pull、Dom三种方式) <转载>
android解析XML总结(SAX.Pull.Dom三种方式) http://www.cnblogs.com/JerryWang1991/archive/2012/02/24/2365507.htm ...
- XML工具类 - XmlUtils.java
XML工具类,提供序列化XML.反序列化XML.获取指定节点的值的方法. 源码如下:(点击下载 - XmlUtils.java.dom4j-1.6.1.jar.xstream-1.4.7.jar ) ...
- Android 软件管理工具类Utils
Android 软件管理工具类Utils /** * Created by uilubo on 2015/9/30. * 工具类 */ public class Utils { public stat ...
- JaxbUtil转json转XML工具类
json转换为XML工具类 package com.cxf.value; import org.springframework.util.StringUtils; import javax.xml.b ...
- java 解析excel工具类
java 解析excel工具类 CreateTime--2018年3月5日16:48:08 Author:Marydon ReadExcelUtils.java import java.io.Fi ...
- Excel解析easyexcel工具类
Excel解析easyexcel工具类 easyexcel解决POI解析Excel出现OOM <!-- https://mvnrepository.com/artifact/com.alibab ...
随机推荐
- [bzoj1122][POI2008]账本BBB
1122: [POI2008]账本BBB Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 402 Solved: 202[Submit][Status ...
- [地图SkyLine二次开发]框架(3)
上节将显示我们地图的OBJECT控件,布了一下局,但地图没有进行加载. 这是因为我们要在另一个页面,对OBJECT控件进行地图加载,并且得到该控件的sgworld,以便对其进行我们想要的开发. 这里, ...
- linux内核学习心得
最初在其他课程做实验的时候接触到了linux,震撼于linux的开源精神,想更了解linux的内部原理,选了这门课程.通过这门课程对linux内部实现有了一定的了解,主要是中断.进程切换.系统函数的具 ...
- 微软亚洲实验室一篇超过人类识别率的论文:Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification ImageNet Classification
在该文章的两大创新点:一个是PReLU,一个是权值初始化的方法.下面我们分别一一来看. PReLU(paramter ReLU) 所谓的PRelu,即在 ReLU激活函数的基础上加入了一个参数,看一个 ...
- springMVC下jsp引用外部js,css等静态资源的解决方法
直入主题. 1. web.xml对springMVC配置如下: <servlet> <description>Spring MVC配置</description> ...
- contiki-事件调度
事件驱动机制广泛应用于嵌入式系统,类似于中断机制,当有事件到来时(比如按键.数据到达),系统响应并处理该事件.相对于轮询机制,事件机制优势很明星,低功耗(系统处于休眠状态,当有事件到达时才被唤醒)和M ...
- 在cwcity空间上安装phpmyadmin
上传程序后,安装phpMyAdmin-4.1.4-all-languages.3715384168.zip 出现了错误: Warning: realpath() [function.realpath] ...
- visual studio 工具的使用
1,快捷键 a, ctrl+e ,ctrl+c 快速注释 ctrl+e ,ctrl+u 取消注释 b,ctrl+k,ctrl+d 快速格式化. 2,开发相关 a,在Microsoft Visual ...
- C指针的大小
应该说这是一个非常基础的问题,教科书上说指针大小和机器字长相同,即32位机指针长度为4字节!但是对不对呢?为什么是这样? 搜了一下相关资料...居然发现回答不统一,很多人也同样是糊里糊涂. 下面对这个 ...
- python 异常处理、文件常用操作
异常处理 http://www.jb51.net/article/95033.htm 文件常用操作 http://www.jb51.net/article/92946.htm