8. androd中XML文件的解析
来源:互联网 发布:淘宝退款不退货规则 编辑:程序博客网 时间:2024/06/01 19:49
1. HTTP数据组织方式有三种:
1).HTML方式(网页)
2).XML方式
3).JSON方式
2. 下面针对XML的解析进行说明:
在网络中使用XML的节点存储数据,如下:
<?xml version="1.0" encodeing="UTF_8"?>
<persons>
<person id="23">
<name>jack</name>
<age>30</age>
</person>
<person id="24">
<name>rose</name>
<age>31</age>
</person>
</persons>
3.在Android 中解析XML数据的三种方式:
1)。DOM
2)。PULL
3)。SAX
4.SAX技术介绍
1)。SAX是一种以事件驱动的XML api,由它定义的事件流可以指定从解析器传到专门的处理程序的代码XML结构,简单的讲,它解析速度快,占用内存少的解析器,这种解析器比较适合Android等移动设备。
2)。SAX的优点:
SAX是流处理的方式处理,当遇到一个标签的时候,并不会记录下当前所碰到的标签。节省内存,速度快。
3)。SAX的劣势:
仅仅是当前的签名的名字和属性,至于标签的嵌套结构,上层的名字,是否有子元素与其他结构相关信息,都不能得到。
5。SAX的使用
1)。定一个继承DefaultHandler的类,DefaultHandler类是触发类的基类。
package com.example;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;public class HttpUtils {public HttpUtils() {// TODO Auto-generated constructor stub}public static InputStream getXml(String path) {InputStream inputStream = null;try {URL url = new URL(path);if (url != null) {HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();urlConnection.setConnectTimeout(3000);urlConnection.setRequestMethod("GET");int code = urlConnection.getResponseCode();if (code == 200) {inputStream = urlConnection.getInputStream();}}} catch (Exception e) {// TODO: handle exception}return inputStream;}}
package com.terminater.sax.service;import java.io.InputStream;import java.util.HashMap;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import com.terminater.sax.handler.SaxHandler;public class SaxService {public SaxService() {// TODO Auto-generated constructor stub}public static List<HashMap<String, String>> readXml (InputStream inputStream, String nodeName) {//创建一个XML解析工厂对象try {SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();SaxHandler<String> handler = new SaxHandler<String>(nodeName);parser.parse(inputStream, handler);inputStream.close();return handler.getList();} catch (Exception e) {e.printStackTrace();return null;}}}
package com.terminater.sax.handler;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SaxHandler<T> extends DefaultHandler {private T t;private HashMap<String, String> map = null;private List<HashMap<String, String>> list = null;private String currentTag = null;// 正在解析的标签private String currentValue = null;// 解析的元素的private String nodeName = null;// 解析当前的节点名称public SaxHandler(String nodeName) {this.nodeName = nodeName;}@Overridepublic void startDocument() throws SAXException {// 当读到第一个开始标签的时候,会触发list = new ArrayList<HashMap<String, String>>();}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {if (qName.equals(nodeName)) {map = new HashMap<String, String>();}if (attributes != null && map != null) {for (int i = 0; i < attributes.getLength(); i++) {map.put(attributes.getQName(i), attributes.getValue(i));}}currentTag = qName;}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// 这个方法是用来处理XML文件所读取到的内容if (currentTag != null && map != null) {currentValue = new String(ch, start, length);if (currentValue != null && !currentValue.trim().equals("")&& !currentValue.trim().equals("\n"))map.put(currentTag, currentValue);}currentTag = null;currentValue = null;}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {if (qName.equals(nodeName)) {list.add(map);map = null;}super.endElement(uri, localName, qName);}@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stubsuper.endDocument();}public List<HashMap<String, String>> getList() {return list;}}
package com.terminater.sax.test;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;import java.util.HashMap;import java.util.List;import com.example.HttpUtils;import com.terminater.sax.service.SaxService;public class Test {public Test() {// TODO Auto-generated constructor stub}public static void main(String[] args) {//InputStream inputStream = HttpUtils//.getXml("http://127.0.0.1:8080/server/person.xml");InputStream inputStream;try {inputStream = new FileInputStream(new File("D://persons.xml"));List<HashMap<String, String>> list = SaxService.readXml(inputStream, "person");for (HashMap<String, String> map : list) {System.out.println(map.toString());}} catch (Exception e) {// TODO: handle exception}}}
0 0
- 8. androd中XML文件的解析
- 反编译androd的apk文件
- weblogic中解析xml文件的问题
- Android中,XML文件的解析
- android中XML文件的解析
- Android中解析xml文件的接口
- Android中xml文件的解析
- Android中XML文件的解析
- Android中解析xml文件的方法
- Android中xml文件的解析
- Android中xml文件的解析
- Android中解析XML文件的方法
- Java中Xml文件的解析
- xml文件的解析
- XML文件的解析
- XML文件的解析
- xml文件的解析
- xml文件的解析
- 索引存储
- 黑马程序员----JDK1.5新特性
- 写在开篇--我的第一篇博客
- Nginx学习笔记(十四):创建worker子进程
- 《洗脑术:怎样有逻辑地说服他人》
- 8. androd中XML文件的解析
- GUID和UUID、CLSID、IID 区别及联系
- CodeCombat-胆怯的辱骂
- 数据存储(一)
- SpringSecurity Filter处理流程
- CROC-MBTU 2012, Elimination Round / 245D Restoring Table (位运算)
- 学习笔记 --- LINUX的同步互斥机制 --- 自旋锁与信号量的区别
- 扩展欧几里得算法&同余方程&模m乘法逆元详解
- 深入理解C语言-----副作用(Side Effect)和顺序点(Sequence Point)