非常简单的XML解析(SAX解析、pull解析)
这里只是把解析的数据当日志打出来了 非常简单的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解析)的更多相关文章
- Android系列--DOM、SAX、Pull解析XML
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
- Android初级教程:Android中解析方式之pull解析
在安卓中有很多种解析方式.按照大方向有xml解析和json解析.而,细致的分,xml和json解析各有自己的很多解析方式.今天这一篇主要介绍xml解析中的pull解析.对于xml的解析方式,我之前在j ...
- Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)
1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...
- Android(java)学习笔记130:Android中操作XML数据(使用Pull解析器)
1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...
- Android笔记(四十六) Android中的数据存储——XML(二)PULL解析
PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText()从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDo ...
- 使用XML序列化器生成XML文件和利用pull解析XML文件
首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...
- java拾遗3----XML解析(三) StAX PULL解析
使用PULL方式解析XML: Pull是STAX的一个实现 StAX是The Streaming API for XML的缩写,一种利用拉模式解析(pull-parsing)XML文档的API StA ...
- SAX与DOM解析XML的区别
解析xml有四种方法:DOM,SAX,DOM4j,JDOM. 我们主要学了两种:DOM和SAX. DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件.各有各的好. DO ...
- Java sax、dom、pull解析xml
-------------------------------------SAX解析xml---------------------------------- >Sax定义 SAX是一个解析速度 ...
随机推荐
- 高级Javascript调试——console.table()
原文:http://www.mariusschulz.com/2013/11/13/advanced-javascript-debugging-with-consoletable 本文只是简单翻译,部 ...
- C#实现执行多条SQl语句,实现数据库事务
C#实现执行多条SQl语句,实现数据库事务 在数据库中使用事务的好处,相信大家都有听过银行存款的交易作为事务的一个例子.事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的 ...
- POJ - 1978 Hanafuda Shuffle
最初给牌编号时,编号的顺序是从下到上:洗牌时,认牌的顺序是从上到下.注意使用循环是尽量统一“i”的初始化值,都为“0”或者都为“1”,限界条件统一使用“<”或者“<=”. POJ - 19 ...
- SQL语句实现取消自增列属性
SQL语句实现取消自增列属性 --由于在SQL-SERVER中,自增列属性不能直接修改,但可以通过以下方式变向实现 --1.如果仅仅是指定值插入,可用以下语句,临时取消 SET IDENTITY_IN ...
- ubuntu 中增加鼠标右键菜单,为Windows 的exe 程序快速增加桌面快捷键
#!/bin/bashmyfile=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHSmyfilename=${myfile##*/}myfilename=${myfilenam ...
- LR HTML与URL录制方式区别
Recording录制选项 这里提供了两个大类的录制方式: 1. HTML-based script基于HTML的脚本 这种方式录制出来的脚本是基于HTML基础的,为每个用户操作生成单独的步骤,这种脚 ...
- (2) 深入理解Java Class文件格式(一)
好文转载:http://blog.csdn.net/zhangjg_blog/article/details/21486985 Class文件在Java体系结构中的位置和作用 在上一篇博客中, 大致讲 ...
- Android 坐标系统
屏幕的左上角是坐标系统原点(0,0),原点向右延伸是X轴正方向,原点向下延伸是Y轴正方向. 一.View的坐标 需要注意view的坐标是相对父容器而言的,包括:getTop().getBott ...
- Jenkins RCE2(CVE-2016-0788)EXP
国内应该有这个EXP的不多,需要点JAVA基础,安装好maven之后,配置下就可以了,官网也给出了样例,乌云也给了分析.
- 【Android】设置 LinearLayout 的样式
前言 LinearLayout是最常用的控件之一,主要是用来进行排版布局,本人介绍如何给LinearLayout 增加边框样式,在增加样式之前的效果如下: 可以看得出来,每个LinearLayout几 ...