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
原创粉丝点击