非常简单的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是一个解析速度 ...
随机推荐
- 【Python】 Subprocess module
1. subprocess.check_output() 2.subprocess.call() 3. subprocess.check_call() the methods 1.2.3 are ar ...
- drop delete truncate 区别
http://jingyan.baidu.com/article/8275fc8693e11846a03cf696.html
- 我去,徒弟半夜来电让写一个PHP短信验证(和群发)
感觉很纳闷啊,,..好几天几乎通宵了,今晚本来以为有个早觉睡,居然2点多才打电话来让帮忙... 记得前段时间还有博友问过同类的问题.... 名字我就隐藏掉了,呵呵,, 我在网上随便找了一个提供相应接口 ...
- Eclipse下编写的web项目部署到tomcat下
之前都是用myeclipse编写web项目,编写好然后在myclipse上配置的tomcat下的webapps文件想项目复制到其他tomcat下就能运行了. 最近学习jquery,将eclipse编写 ...
- MVC 4 异步编程简化了
MVC 3 异步编程好麻烦,需要使用异步控制器,一个Action需要拆成两个,很不方便.MVC3的好处是,只需要.NET Framework 4.0就能运行 MVC 4 之后只需要使用async和aw ...
- Hide SSH Welcome Banner/Message on Ubuntu14.04+
Introduction Usually when you logged in you linux based PC remotely via SSH, a long banner will be d ...
- iOS9适配 之 关于info.plist 第三方登录 添加URL Schemes白名单
近期苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装. 受此影响,当你的应用在 ...
- 关于jstl标签引入的问题
1.源码: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> < ...
- selenium杀掉浏览器进程方法
* 杀掉浏览器进程 */ public static void operateWindowsProcess(){ WindowsUtils.tryToKillByNa ...
- Django migrations 重命名
1:如果migrations文件中想要重命名文件,重命名后有一次修改models文件,再次执行python makegirations ******,再次执行migrate的时候发现报错了,在我往后的 ...