XML文件解析并利用SimpleAdapter将解析结果显示在Activity中
首先创建一个实体类 Mp3Info用来存储解析的XML文件中的内容:
public class Mp3Info implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private String mp3Name;
private String mp3Size;
private String lrcName;
private String lrcSize;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMp3Name() {
return mp3Name;
}
public void setMp3Name(String mp3Name) {
this.mp3Name = mp3Name;
}
public String getMp3Size() {
return mp3Size;
}
public void setMp3Size(String mp3Size) {
this.mp3Size = mp3Size;
}
public String getLrcName() {
return lrcName;
}
public void setLrcName(String lrcName) {
this.lrcName = lrcName;
}
public String getLrcSize() {
return lrcSize;
}
public void setLrcSize(String lrcSize) {
this.lrcSize = lrcSize;
}
public Mp3Info(String id, String mp3Name, String mp3Size, String lrcName,
String lrcSize) {
super();
this.id = id;
this.mp3Name = mp3Name;
this.mp3Size = mp3Size;
this.lrcName = lrcName;
this.lrcSize = lrcSize;
}
public Mp3Info() {
super();
}
@Override
public String toString() {
return "Mp3Info [id=" + id + ", mp3Name=" + mp3Name + ", mp3Size="
+ mp3Size + ", lrcName=" + lrcName + ", lrcSize=" + lrcSize
+ "]";
}
}
文件下载后将文件存入一个String类型的变量中,从而对文件进行解析,需创建一个Mp3ListContentHandler类,用来定义对读取的String字符串的解析过程:
private List<Mp3Info> parse(String xmlStr){
//创建一个SaxParserFactory
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
//创建List数组,其中数据类型为Mp3Info
List<Mp3Info> infos = new ArrayList<Mp3Info>();
try{
//生成XMLReader对象
XMLReader xmlReader = saxParserFactory.newSAXParser().getXMLReader();
Mp3ListContentHandler mp3ListContentHandler = new Mp3ListContentHandler(infos);
//为XMLReader设置内容处理器,当遇到文件标签响应的位置时,触发相应的事件
xmlReader.setContentHandler(mp3ListContentHandler);
//开始解析文件,StringReader是IO流中的一个类,专门以流的方式处理一个字符串
xmlReader.parse(new InputSource(new StringReader(xmlStr)));
for(Iterator iterator = infos.iterator();iterator.hasNext();){
Mp3Info mp3Info = (Mp3Info) iterator.next(); //此方法可以得到infos中的每一个Mp3Info对象
}
}catch(Exception e){
e.printStackTrace();
}
return infos; //此时得到的Infos对象,为XMLStr中的所有的元素Mp3Name,Mp3Size,LrcName,LrcSize
}
Mp3ListContentHandler类的定义如下:
public class Mp3ListContentHandler extends DefaultHandler{
private List<Mp3Info> infos = null;
private Mp3Info mp3Info = null;
//构造函数,在对象创建时,将infos对象进行赋值
public Mp3ListContentHandler(List<Mp3Info> infos) {
super();
this.infos = infos;
}
private String tagName = null;
public List<Mp3Info> getInfos() {
return infos;
}
public void setInfos(List<Mp3Info> infos) {
this.infos = infos;
}
//当开始解析文件时,就会调用startDocument方法
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//uri就是当前正在解析的XML文件的命名空间,localName不带前缀的标签名称,qName是带前缀的标签名,attributes代表的是标签的属性
this.tagName = localName;
if(tagName.equals("resource")){
//当遇到resource时生成一个mp3Info对象
mp3Info = new Mp3Info();
}
}
/**
* 得到标签当中的内容,将当前内容存入ch的start开始,长度为length的数组中
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
String temp = new String(ch,start,length);
if(tagName.equals("id")){
mp3Info.setId(temp);
}
else if(tagName.equals("mp3.name")){
mp3Info.setMp3Name(temp);
}
else if(tagName.equals("mp3.size")){
mp3Info.setMp3Size(temp);
}
else if(tagName.equals("lrc.name")){
mp3Info.setLrcName(temp);
}
else if(tagName.equals("lrc.size")){
mp3Info.setLrcSize(temp);
}
super.characters(ch, start, length);
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if(qName.equals("resource")){
//当遇到标签结尾时,将当前对象加入到List<Mp3Info>当中
infos.add(mp3Info);
}
tagName = "";
}
}
将解析得到的infos结果显示在Activity当中:
private void UpdataListView(){
//下载包含所有Mp3基本信息的xml文件
String xml = downloadXML("http://192.168.1.105:8080/mp3/resources.xml");
//对XML文件进行解析,并将解析的结果放入Mp3Info对象当中,最后将这些Mp3Info对象放置到List当中
infos = parse(xml);
//将SimpleAdapter对象设置到ListActivity当中
SimpleAdapter simpleAdapter = buildSimpleAdapter(infos);
Mp3ListActivity.this.setListAdapter(simpleAdapter);
}
private SimpleAdapter buildSimpleAdapter(List<Mp3Info> infos){
//生成一个List对象,并按照SimpleAdapter的标准,将infos当中的数据添加到List当中去
List<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
for(Iterator iterator = infos.iterator();iterator.hasNext();){
Mp3Info mp3Info = (Mp3Info) iterator.next();
HashMap<String,String> map = new HashMap<String,String>();
map.put("mp3_name", mp3Info.getMp3Name());
map.put("size_id", mp3Info.getMp3Size());
list.add(map);
}
//创建一个SimpleAdapter对象
SimpleAdapter simpleAdapter = new SimpleAdapter(this, list,
R.layout.mp3info_item, new String[] { "mp3_name", "size_id" },
new int[] { R.id.mp3_name, R.id.size_id });
// 将这个SimpleAdapter对象设置到ListActivity当中
return simpleAdapter;
}
XML文件解析并利用SimpleAdapter将解析结果显示在Activity中的更多相关文章
- Android -- 创建XML文件对象及其序列化, pull解析XML文件
1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...
- Android程序解析XML文件的方法及使用PULL解析XML案例
一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...
- C#关于xml文件和TreeView之间的转换解析
主窗体: using System; using System.Collections; using System.Collections.Generic; using System.Componen ...
- FOR XML PATH 语句的应用【所有列值显示在一行中】
原文发布时间为:2010-10-20 -- 来源于本人的百度文章 [由搬家工具导入] 大家都知道在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一 ...
- android基础知识13:AndroidManifest.xml文件解析
注:本文转载于:http://blog.csdn.net/xianming01/article/details/7526987 AndroidManifest.xml文件解析. 1.重要性 Andro ...
- 使用Pull解析器生成XML文件和读取xml文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...
- 【U1结业机试题】新闻内容管理系统:解析XML文件读取Html模版生成网页文件
一.作业要求: 1.在xml文件中创建新闻节点news,包含标题.作者.日期.正文等信息 2.创建HTML模板文件 3.读取xml中所有新闻信息,并使用新闻信息替换模板文件中占位符,从而为每一条新闻生 ...
- JAVA使用SAX解析XML文件
在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...
- Tomcat源码分析——SERVER.XML文件的加载与解析
前言 作为Java程序员,对于Tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载和解析的进行分析. 加载 server.xm ...
随机推荐
- 猥琐的wordpress后门分享
https://www.t00ls.net/thread-37312-1-1.html 一个可以自动调用管理员帐号登录wordpress后台的方法. <?php require('../../. ...
- spring mvc + ehcache 利用注解实现缓存功能
我的spring是3.1的,因为项目需求,需要在查询时候加上缓存,小白一个,完全没有用过缓存(ehcache),摸索了一天终于会了一点通过注解来使用ehcache进行缓存,立刻给记录下来. 首先 我的 ...
- PHP如何使用GeoIP数据库
1.首先下载GeoIP的IP库.参考<利用GeoIP数据库及API进行地理定位查询>.下载后解压,得到一个GeoIP.dat文件 2.新建一个文件geoip.inc.内容为 <?ph ...
- C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)
详解link 有 些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错 ...
- CSS的定位
定位的基本思想:允许你定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素甚至浏览器窗口本身的位置 一切皆为框 div.h1 或 p 元素常常被称为块级元素 ...
- 前端编码规范之CSS
"字是门面书是屋",我们不会去手写代码,但是敲出来的代码要好看.有条理,这还必须得有一点约束~ 团队开发中,每个人的编码风格都不尽相同,有时候可能存在很大的差异,为了便于压缩组件对 ...
- R in Action 读书笔记(5)
MindMapper原文件
- Windows+GCC下内存对齐的常见问题
结构/类对齐的声明方式 gcc和windows对于modifier/attribute的支持其实是差不多的.比如在gcc的例子中,内存对齐要写成: class X { //... } __attrib ...
- ASP.NET MVC 路由(一)
ASP.NET MVC路由(一) 前言 从这一章开始,我们即将进入MVC的世界,在学习MVC的过程中在网上搜索了一下,资料还是蛮多的,只不过对于我这样的初学者来看还是有点难度,自己就想看到有一篇引导性 ...
- C#设计模式之桥接
IronMan之桥接 前言 前面的几个篇幅都是在讲"部件"的生产已经简简单单的使用,以后可能要对"部件"进行升级,不是不对它本身升级,是其它方式的升级,可以让它 ...