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 ...
随机推荐
- 安装升级npm依赖
npm-check 能够自动检索npm包版本,并且提供交互操作界面: 有以下功能: 1.告诉你那些依赖已经过时: 2.在你决定升级时,给你提供依赖包的文档: 3.提示某个依赖没有被你使用: 4.支持全 ...
- 读文章《Flexbox详解》笔记
文章地址:Flexbox详解 属性摘抄: flex container : display: other values | flex | inline-flex; flex-direction: ro ...
- easyui 随笔
问题1:easyui-datagrid中,如果装载datagrid的表格通过javascript 或者 jquery 来resize,那么将会reload重新加载数据.这样当我们调整的时候不得不重新发 ...
- Too Many Connections: How to Increase the MySQL Connection Count To Avoid This Problem
1.问题描述 在启动使用mysql数据库的项目时,遇到一个报错,如下: Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConn ...
- [SoapUI] 在SoapUI里获取Excel中多行数据并存入List
ArrayList<ArrayList<String>> getCellValuesH( String filePath, String sheetName,int tr1,i ...
- 表单提交与后台PHP如何接口?
在网页中,常常有这样那样的表单需要提交,比如登陆,比如注册,比如查询,比如填写问卷.在这样的表单提交过程中,我们究竟向后台提交了什么,是以什么形式提交的,是一个很值得探讨的问题. 提交了什么——就是我 ...
- 摸索Tableau
将本年度第几周转变为对应范围内的某日期 201607 → 2016-02-18 DATEADD('day',7*(int(RIGHT([WEEK_ID],2))-1),DATEPARSE(" ...
- .frm,.myd,myi转换为.sql导入数据库
先说说这几种文件是干什么的: *.frm是描述了表的结构, *.myd保存了表的数据记录, *.myi则是表的索引. 其实一个.frm文件就是对应的数据库中的一个表,表示数据表的表结构. .MYD文件 ...
- gulp教程之gulp-rev-append
简介: 使用gulp-rev-append给页面的引用添加版本号,清除页面引用缓存. 1.安装nodejs/全局安装gulp/项目安装gulp/创建package.json和gulpfile.js文件 ...
- SQL Server中Text和varchar(max)数据类型区别
SQL Server中Text和varchar(max)数据类型区别 以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与v ...