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 ...
随机推荐
- Ember.js 的视图层
本指导会详尽阐述 Ember.js 视图层的细节.为想成为熟练 Ember 开发者准备,且包 含了对于入门 Ember 不必要的细节. Ember.js 有一套复杂的用于创建.管理并渲染连接到浏览器 ...
- [bzoj1935][shoi2007]Tree 园丁的烦恼(树状数组+离线)
1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec Memory Limit: 357 MBSubmit: 980 Solved: 450[Submit][ ...
- ubuntu服务管理
uRedhat 提供了chkconfig这个命令来管理系统在不同运行级别下的服务开启/关闭: chkconfig ServiceName on/off 并可以用chkconfig --list(两个杠 ...
- CSS选择器详解
选择器是CSS的核心,从最初的元素.class/id选择器,演进到伪元素.伪类,以及CSS3中提供的更丰富的选择器,定位页面上的任意元素开始变得愈发的简单. 1.元素选择器 这是最基本的CSS选择器, ...
- 《C++ Primer》学习笔记【第一部分 C++基础】
第2章 整型的赋值:当我们试着把一个超出其范围的值赋给一个指定类型的对象时,结果如何?答案取决于类型是signed还是unsigned的.对于unsigned,编译器会将该值对unsigned类型的 ...
- Xcode7 模拟器安装app (转)
本文转自同事zz的博客http://archerzz.cn/ios/xcode-install-app.html 原由 很多时候,为了学习了解别人的app,很多时候我们是直接拿别人的app安装在自己的 ...
- UIStackView使用 (堆视图)
一基本使用 1创建多个子控件 for (int i = 0; i < 3; i++) { UIButton *imgBtn = [UIButton buttonWithType:UIButton ...
- PUTTY用密钥登陆服务器
1.puttygen生成private_key和public_key,保存private_key: 2.在 ~/.ssh/authorized_keys中添加public_key,(vi ~/.ssh ...
- 不使用插件实现对WordPress默认编辑器的增强
四处寻觅无果.无意看了一下wordpress官方的API函数.苍天有眼啊!原来,后台的编辑器可以插入很多增强功能.果断卸载掉CK and SyntaxHighlighter编辑器插件.事实上,Word ...
- git的常用命令
简介 上篇讲解git的博客,在centos6.5中安装完成了github客户端,接下来我们来熟悉git的操作命令 1.查看自己机器中安装的git版本 [root@jacky conf]# git - ...