/**
* 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 工具类的更多相关文章

  1. jaxb解析xml工具类

    [quote]jaxb jdk 自带的解析xml的一种方式支持,只需要用注解对javabean进行数据绑定[/quote] package com.nnk.flowrecharge.common;im ...

  2. android解析xml文件的方式

    android解析xml文件的方式   作者:东子哥 ,发布于2012-11-26,来源:博客园   在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xm ...

  3. 一个使用命令行编译Android项目的工具类

    一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...

  4. android解析XML总结(SAX、Pull、Dom三种方式) <转载>

    android解析XML总结(SAX.Pull.Dom三种方式) http://www.cnblogs.com/JerryWang1991/archive/2012/02/24/2365507.htm ...

  5. XML工具类 - XmlUtils.java

    XML工具类,提供序列化XML.反序列化XML.获取指定节点的值的方法. 源码如下:(点击下载 - XmlUtils.java.dom4j-1.6.1.jar.xstream-1.4.7.jar ) ...

  6. Android 软件管理工具类Utils

    Android 软件管理工具类Utils /** * Created by uilubo on 2015/9/30. * 工具类 */ public class Utils { public stat ...

  7. JaxbUtil转json转XML工具类

    json转换为XML工具类 package com.cxf.value; import org.springframework.util.StringUtils; import javax.xml.b ...

  8. java 解析excel工具类

      java 解析excel工具类 CreateTime--2018年3月5日16:48:08 Author:Marydon ReadExcelUtils.java import java.io.Fi ...

  9. Excel解析easyexcel工具类

    Excel解析easyexcel工具类 easyexcel解决POI解析Excel出现OOM <!-- https://mvnrepository.com/artifact/com.alibab ...

随机推荐

  1. [poj2348]Euclid's Game(博弈论+gcd)

    Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9033   Accepted: 3695 Des ...

  2. 配置log4j

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

  3. miniui

    //android提供了一个库minui用于简单的UI输出,源码在bootable/recovery/minui中, //gr_init()和gr_font_size()为minui库提供方法,gr_ ...

  4. OSChina码云试用

    首先在码云申请账户. 从 http://git-scm.com/download  下载window版的客户端.下载好,一步一步安装即可. $git config --global user.name ...

  5. 【Java】异常处理_学习笔记

    异常: 1.格式1: try { //业务代码 } catch(Exception e) { //异常处理代码 } 说明: a.   异常抛出:执行try里的代码,系统会自动生成一个异常对象,该对象会 ...

  6. Netscape HTTP Cooke File Parser In PHP

    http://www.hashbangcode.com/blog/netscape-http-cooke-file-parser-php I recently needed to create a f ...

  7. 冰球项目日志4-yjw

    小组讨论 我们组编程主要分成三个模块,各自负责自己的编程与测试. 杨静梧:确定击球算法编程.输入:冰球位置,速度大小方向:输出:撞击时冰球中心位置. 曹迦勒:确定击球手速度,位置.输入:撞击时冰球中心 ...

  8. Sudoku 数独游戏

    #include<iostream> using namespace std; bool heng(int **sudo, int a, int b, int value) { bool ...

  9. kaggle数据挖掘竞赛初步--Titanic<原始数据分析&缺失值处理>

    Titanic是kaggle上的一道just for fun的题,没有奖金,但是数据整洁,拿来练手最好不过啦. 这道题给的数据是泰坦尼克号上的乘客的信息,预测乘客是否幸存.这是个二元分类的机器学习问题 ...

  10. Android 布局中 如何使控件居中

    首先要分两种不同情况,在两种不同的布局方式下:LinearLayout 和RelativeLayout 1. LinearLayout a). android:layout_gravity=" ...