这里只是把解析的数据当日志打出来了   非常简单的xml解析方式
package com.example.demo.service; import java.io.IOException;
import java.io.InputStream; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import org.xmlpull.v1.XmlPullParser; import android.renderscript.Element;
import android.util.Log;
import android.util.Xml;

public class PullXMLService {
/**
*
* pull解析
* @param is xml输入
* @return
* @throws Exception
*/
public String pullParser(InputStream is) throws Exception { XmlPullParser parser = Xml.newPullParser();
//设置编码,编码不对解析不出来
parser.setInput(is, "GBK");
//接收事件类型
int type =parser.getEventType();
//事件类型不为END_DOCUMENT 继续循环
while (type!=XmlPullParser.END_DOCUMENT) {
switch (type) {//判断事件类型是否开始元素
case XmlPullParser.START_TAG:
//是开始元素开始有条件的解析
if("hunan".equals(parser.getName())){
Log.e("ss", parser.getAttributeValue(0));
}else if("city".equals(parser.getName())){
//取属性,可以下标取,也可以属性名称取
Log.e("ss", "城市:"+parser.getAttributeValue(2)+"天气:"+parser.getAttributeValue(8)+"温度:"+parser.getAttributeValue(10)+"-"+parser.getAttributeValue(9)+"实时温度"+parser.getAttributeValue(11)+"风力:"+parser.getAttributeValue(12)+"湿度:"+parser.getAttributeValue(14)+"时间:"+parser.getAttributeValue(15)+"");
//取文本
String text=parser.nextText();
}else{
}
break;
}
//循环一次更改事件状态
type = parser.next();
}
return null; }
/**
* SAX方式解析Xml
* @param is xml输入
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
*/
public void saxParsar(InputStream is) throws ParserConfigurationException, SAXException, IOException {
//创建sax工厂
SAXParserFactory sf = SAXParserFactory.newInstance();
//实例化sax
SAXParser sp =sf.newSAXParser();
//解析调用 ,具体解析方法在 DHDefaultHandler类 在下面
sp.parse(is, new DHDefaultHandler()); } } /**
* SAX解析通过继承DefaultHandler 重写父类方法实现,具体重写什么方法看具体情况
* @author huqiang
*
*/
class DHDefaultHandler extends DefaultHandler { /**
* 开始标签处,可解析处标签属性,具体要解析什么数据自己判断执行,运行顺序
* startDocument() → startElement() → characters() → endElement() → endDocument()
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
Log.e("afa", "元素解析开始");
int attrlegth = attributes.getLength();
Log.e("afa"+attrlegth, localName);
if("city".equals(qName)){
//如果没有值最好处理下,或者空格
Log.e("afa", "城市:"+attributes.getValue(2)+"天气:"+attributes.getValue(8)+"温度:"+attributes.getValue(10)+"-"+attributes.getValue(9)+"实时温度"+attributes.getValue(11)+"风力:"+attributes.getValue(12)+"湿度:"+attributes.getValue(15)+"时间:"+attributes.getValue(16)+"");
/*for (int i = 0; i < attrlegth; i++) {
String attrVal = attributes.getValue(i);
Log.e("afa"+i, attrVal+"===localName="+localName+",qName="+qName);
}*/
}
}
/**
* 解析标签包含的文本,具体需要解析什么标签具体判断
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
String str = new String(ch,start,length);
Log.e("afa", "解析标签文本");
Log.e("afa", ""+str);
super.characters(ch, start, length);
} @Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub Log.e("afa", "开始解析");
super.startDocument();
} @Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
Log.e("afa", "解析结束");
super.endDocument();
} @Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
Log.e("afa", "元素解析结束");
super.endElement(uri, localName, qName);
}
}
测试类  xml文件放在src目录下面  
package com.example.demo.test; import java.io.InputStream; import com.example.demo.service.PullXMLService; import android.test.AndroidTestCase; public class Test extends AndroidTestCase {
public void testPullParser() throws Exception { PullXMLService pull = new PullXMLService();
//pull.pullParser(Test.class.getClassLoader().getResourceAsStream("weather.xml"));
pull.saxParsar(Test.class.getClassLoader().getResourceAsStream("weather.xml")); } }

非常简单的XML解析(SAX解析、pull解析)的更多相关文章

  1. Android系列--DOM、SAX、Pull解析XML

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  2. Android初级教程:Android中解析方式之pull解析

    在安卓中有很多种解析方式.按照大方向有xml解析和json解析.而,细致的分,xml和json解析各有自己的很多解析方式.今天这一篇主要介绍xml解析中的pull解析.对于xml的解析方式,我之前在j ...

  3. Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)

    1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...

  4. Android(java)学习笔记130:Android中操作XML数据(使用Pull解析器)

    1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...

  5. Android笔记(四十六) Android中的数据存储——XML(二)PULL解析

    PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText()从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDo ...

  6. 使用XML序列化器生成XML文件和利用pull解析XML文件

    首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...

  7. java拾遗3----XML解析(三) StAX PULL解析

    使用PULL方式解析XML: Pull是STAX的一个实现 StAX是The Streaming API for XML的缩写,一种利用拉模式解析(pull-parsing)XML文档的API StA ...

  8. SAX与DOM解析XML的区别

    解析xml有四种方法:DOM,SAX,DOM4j,JDOM.     我们主要学了两种:DOM和SAX.     DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件.各有各的好. DO ...

  9. Java sax、dom、pull解析xml

    -------------------------------------SAX解析xml---------------------------------- >Sax定义 SAX是一个解析速度 ...

随机推荐

  1. IntelliJ IDEA Community Edition 14.1.4下使用 Apache-Subversion搭建代码管理环境

    当前我的idea 版本是14.1.4. 1,)SVN Server下载与安装(https://www.visualsvn.com/server/): 因为我开发机是x64的,所以我优先下载 x64的 ...

  2. 使用@Configuration注解来代替Spring的bean配置

    下面是一个典型的Spring配置文件(application-config.xml): <beans> <bean id="orderService" class ...

  3. (一)s3c2440 地址分配讲解 (很难很纠结)

    mini2440的地址怎么分配.mini2440处理器的地址怎么分配. S3C2440处理器可以使用的物理地址空间可以达到4GB,其中前1GB的地址(也就是0x0000 0000--0x4000 00 ...

  4. JAVA基础语法。

    1.java数据类型和变量布尔型.短整型.整型.长整型.浮点型.双精度型.字符型.字节型.8中数据类型结构.2. 变量的作用域3.常量.关键字.标识符4.运算符和表达式 4.1算术运算符 4.2位运算 ...

  5. sqlyong64位破解

    姓名(Name):cr173 序列号(Code):8d8120df-a5c3-4989-8f47-5afc79c56e7c 或者(OR) 姓名(Name):cr173 序列号(Code):59adfd ...

  6. Hibernate Criteria Restrictions

    HQL运算符 QBC运算符 含义 = Restrictions.eq() 等于equal <>  Restrictions.ne() 不等于not equal >  Restrict ...

  7. Azure Table storage 之改进DynamicTableEntity类为其添加动态语言扩展

    在之前的一篇文章中提到,storage类库中包含一个可以用来动态获取Azure table storage 表结构的类-DynamicTableEntity. 我们可以通过这个类,我们无需为每一个表提 ...

  8. Script循环语句 的相关知识跟练习

    循环语句有两种问题类型:穷举和迭代 穷举: 在不知道什么情况下才是我们需要的结果的时候,只能让它一个一个的都执行一遍 迭代:在现有的条件下,根据规律,不断求解中间情况,最终推选出结果 两个关键词 br ...

  9. Linux常用命令(四)

    1.xargs 作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题 语法格式: # xargs [-ni] 常用参数: 参数 参数说明 -n 分组输出,n个分为一组 -i 与大括号 ...

  10. zigbee学习之路(十):串口(接收)

    一.前言 上次我们学习了串口的发送,今天我们要学习串口的接收,要实现的功能是接收电脑发来的数据,控制LED 灯闪烁,而且将收到的数据发回给电脑显示出来.而且要采用不占用cpu资源的中断. 二原理与分析 ...