Android中XML数据解析
2016-10-17 22:19
375 查看
一般情况下服务器端返回给客户端的数据主要包括三种类型,字符串,xml,json,因此需要解析成为可读数据。xml数据传输,现在已经用的比较少了,而json用的比较广泛。不过还有一些免费的接口还是会返回xml形式数据,因此学习xml解析还是有必要的!!!
XML常用解析方式:
SAX解析
PULL解析
DOM解析
废话少说直接撸码….
得到SAXParserFactory对象
得到xml读取对象
设置内容处理器
开始解析
XML数据:
MainActivity.java
MyContentHandler.java内容处理器
输出结果:
TwoActivity.java
输出结果:
效果图:
很简单的,可以下下来跑一下~~~若有问题恳请指正,欢迎评论交流~
Demo下载地址:http://download.csdn.net/detail/magic_jss/9656315;
爱我所爱,无怨无悔!
1、概述
什么是XML?可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。特点,可读性强,传输效率低。XML常用解析方式:
SAX解析
PULL解析
DOM解析
废话少说直接撸码….
2、SAX解析
使用SAX解析XML是用的比较多的,主要由以下几个步骤:得到SAXParserFactory对象
得到xml读取对象
设置内容处理器
开始解析
XML数据:
<xml> <man> <name>一一</name> <age>11</age> <address>北京</address> </man> <man> <name>二二</name> <age>22</age> <address>济南</address> </man> </xml>
MainActivity.java
/** * Created by magic on 2015年2月23日.SAX解析 */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); try { String string = "<xml><man><name>一一</name><age>11</age><address>北京</address></man>" + "<man><name>二二</name><age>22</age><address>济南</address></man></xml>"; // 单例模式 得到 SAXParserFactory factory = SAXParserFactory.newInstance(); // 得到xml读取对象 XMLReader xmlReader = factory.newSAXParser().getXMLReader(); // 设置内容处理器 xmlReader.setContentHandler(new MyContentHandler()); // 解析 xmlReader.parse(new InputSource(new StringReader(string))); } catch (Exception e) { e.printStackTrace(); } } }
MyContentHandler.java内容处理器
/** * Created by magic on 2015年2月23日.自定义类 继承DefaultHandler类 */ public class MyContentHandler extends DefaultHandler { String hisName, hisAge, hisAddress; String tagName; @Override public void startDocument() throws SAXException { // 开始解析 System.out.println("-----------begin-------------"); } // uri: 命名空间 localName:没有前缀的标签 qName:有前缀的标签 attributes:标签的属性 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { tagName = localName; if (tagName.equals("man")) { // 输出属性名和值 for (int i = 0; i < attributes.getLength(); i++) { System.out.println(attributes.getLocalName(i) + ":" + attributes.getValue(i)); } } } @Override public void characters(char[] ch, int start, int length) throws SAXException { // 解析数据实体并赋值 if (tagName.equals("name")) hisName = new String(ch, start, length); else if (tagName.equals("age")) hisAge = new String(ch, start, length); else if (tagName.equals("address")) hisAddress = new String(ch, start, length); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // 解析元素结束 if (localName.equals("man")) { System.out.println("hisName------>" + hisName); System.out.println("hisAge------>" + hisAge); System.out.println("hisAddress------>" + hisAddress); } } @Override public void endDocument() throws SAXException { // 解析结束 System.out.println("---------end-----------"); } }
输出结果:
3、PULL解析
XML数据:<students> <student id="001"> <name>张三</name> <age>20</age> </student> <student id="002"> <name>李四</name> <age>21</age> </student> </students>
TwoActivity.java
/** * Created by magic on 2015年2月23日. PULL解析 */ public class TwoActivity extends Activity { List<Student> students; String s = "<students><student id='001' ><name>张三</name><age>20</age></student>" + "<student id='002'><name>李四</name><age>21</age></student></students>"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); try { pullJXXml(); } catch (Exception e) { e.printStackTrace(); } } /** * pull解析xml * * @throws Exception */ private void pullJXXml() throws Exception { // 创建一个XmlPullParser实例 XmlPullParser parser = Xml.newPullParser(); InputStream inputStream = new ByteArrayInputStream(s.getBytes()); // try { // 设置输入流 并指明编码方式 parser.setInput(inputStream, "UTF-8"); int event = parser.getEventType(); Student s = null; while (event != XmlPullParser.END_DOCUMENT) { switch (event) { // 判断当前事件是否为文档开始标签 case XmlPullParser.START_TAG: if (parser.getName().equals("students")) { // 初始化students集合 students = new ArrayList<Student>(); } else if (parser.getName().equals("student")) { // 得到标签属性 String id = parser.getAttributeValue(0); s = new Student(); s.setId(id); } else if (parser.getName().equals("name")) { // 让解析器指向name属性的值 String name = parser.nextText(); s.setName(name); } else if (parser.getName().equals("age")) { // 让解析器指向age属性的值 String age = parser.nextText(); s.setAge(Integer.valueOf(age)); } break; // 判断当前事件是否为标签元素结束事件 case XmlPullParser.END_TAG: if (parser.getName().equals("student")) { // 将student添加到students集合 students.add(s); } } // 进入下一个元素并触发相应事件 event = parser.next(); } // 增强for输出 for (Student student : students) { System.out.println("--->" + student.toString()); } } /** * 自定义对象 */ class Student { private String id; private String name; private int age; public Student() { } public Student(String id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", age=" + age + "]"; } } }
输出结果:
4、DOM解析
未完待续……5、XML解析实战
天气预报袖珍版Demo,该实例就是通过了网络接口获取数据(XML形式)、解析数据、设置数据等步骤。由于篇幅问题就不放上来了下面给出下载地址。效果图:
很简单的,可以下下来跑一下~~~若有问题恳请指正,欢迎评论交流~
Demo下载地址:http://download.csdn.net/detail/magic_jss/9656315;
爱我所爱,无怨无悔!
相关文章推荐
- Android pull解析XML数据
- Android 获取Google Weather API 并通过Xml和JSON解析数据
- Android--3种解析XML数据的步骤
- Android数据存储之XmlPull解析XML文件(读取部分)
- Android数据存储——2.文件存储_E_Pull解析XML文档
- Android Json 数据解析 II 之 ------xml ,json 两种数据格式之对比
- android之xml数据解析(DOM)
- Android 解析网络数据传输JSON或XML对象
- android之xml数据解析(Pull)
- Android数据存储之DOM解析XML文件(输出部分)
- Android 获取Google Weather API 并通过Xml和JSON解析数据
- android-利用xml解析和生成数据
- android之xml数据解析(SAX)
- Android数据存储——2.文件存储_C_DOM解析XML文档
- Android dom解析XML数据
- 【Android Training - Connectivity】基本网络操作 [ Lesson 3 - 详解如何解析XML数据 ]
- 在 Android 应用程序中使用 Internet 数据 解析 XML、JSON 和 protocol buffers 数据
- 传智播客—Android(三)数据存储之XML解析技术
- Android数据存储——2.文件存储_E_Pull解析XML文档
- Android数据存储——2.文件存储_C_DOM解析XML文档