常见的XML解析有哪几种?

DOM解析;

PULL解析;(android自带的解析XML的技术)

JDOM解析;

SAX解析;

DOM4J

PULL解析示例代码:

<1>

我们要解析的XML文件已经放在本地应用的文件夹下或者是网络上的

注意:这样的话这两种情况都需要在功能清单文件下注册好权限。

<2>

XmlPullParser:XML拉式剖析器

android的pull解析有以下过程:

XmlPullParser.getEventType:主要获取当前解析器位于哪个节点上。

XmlPullParser.getName:主要是用来获取处在START_TAG或END_TAG事件时的xml标签名。

XmlPullParser.getText:主要是用来获取文本内容。

XmlPullParser.next():将解析器移动到下一个事件上,这样可以把所有xml文件遍历完.


(从网上获取)实例代码:

package com.example.tf.androidpull.com.example.utils;import android.util.Xml;import com.example.tf.androidpull.com.example.domin.Person;import org.xmlpull.v1.XmlPullParser;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.StringReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.List;/** * Created by TF on 2018/6/4. */public class NetUtils {    //将网络地址转化为输入流对象    public static InputStream getInputStreamByPath(String path) throws Exception {        URL url = new URL(path);        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();        httpURLConnection.setConnectTimeout(3000);        int responseCode = httpURLConnection.getResponseCode();        if (responseCode == httpURLConnection.HTTP_OK) {            return httpURLConnection.getInputStream();        }        return null;    }    //将输入流转化为字节数组    public static byte[] getByteArrayByInputStream(InputStream inputStream) throws IOException {        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();        byte[] buffer = new byte[1024];        int len = 0;        while ((len = inputStream.read(buffer)) != -1) {            byteArrayOutputStream.write(buffer, 0, len);        }        return byteArrayOutputStream.toByteArray();    }    //降输入流转化为字符串    public static String getStringInputStream(InputStream inputStream) throws IOException {        return new String(getByteArrayByInputStream(inputStream));    }    //解析xml    //START_DOCUMENT:表示xml开始解析。END_DOCUMENT:表示xml解析结束    public static List getPersonsByXmlString(String xml) throws Exception {        List persons = new ArrayList<>();        //得到Pull解析器对象        XmlPullParser xmlPullParser = Xml.newPullParser();        //设置需要解析的Xml数据        xmlPullParser.setInput(new StringReader(xml));        //得到事件对象        int eventType = xmlPullParser.getEventType();        while(eventType!=XmlPullParser.END_DOCUMENT){            switch (eventType){                case XmlPullParser.START_DOCUMENT:                    System.out.println();                    break;                case XmlPullParser.START_TAG://开始标签                    String startTag = xmlPullParser.getName();                    System.out.println();                    break;                case XmlPullParser.TEXT://文本内容                    String text = xmlPullParser.getText();                    System.out.println();                    break;                case XmlPullParser.END_TAG://结束标签                    String endTag = xmlPullParser.getName();                    System.out.println();                    break;            }                eventType = xmlPullParser.next();             }        return  persons;    }}


(从本地获取)实例代码:

package com.hsj.example.pullparsedemo09;import android.content.res.AssetManager;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Xml;import org.xmlpull.v1.XmlPullParser;import java.io.InputStream;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //得到原生管理器对象        AssetManager assetManager=getAssets();        try {            //调用原生管理器对象的open()方法传递需要读取的文件名,返回输入流对象            InputStream inputStream=assetManager.open("persons.xml");            //1.得到Xml解析器对象           XmlPullParser parser= Xml.newPullParser();            //2.指定解析器要解析的xml文件在哪里,这里以InputStream 的形式给予            parser.setInput(inputStream,"utf-8");            //3.得到事件类型            int eventType=parser.getEventType();            //XmlPullParser.START_DOCUMENT=0            System.out.println("eventType="+eventType);            //只要没有解析完毕指定的xml 文件则继续解析            // XmlPullParser.END_DOCUMENT=1            while (eventType!=XmlPullParser.END_DOCUMENT){                switch (eventType){                    //XmlPullParser.START_TAG=2:遇到开始标签时执行                    case XmlPullParser.START_TAG:                        //得到当前解析到的标签的名字                        String starTag=parser.getName();                        if("person".equals(starTag)){                           String id= parser.getAttributeValue(0);                            String isbn=parser.getAttributeName(1);                            System.out.println("id="+id+",isbn="+isbn);                        }else if("name".equals(starTag)){                            //将事件流向后推进并返回解析到的内容                            String name=parser.nextText();                            System.out.println("name="+name);                        }                        System.out.println("startTag="+starTag);                        break;                    //XmlPullParser.TEXT=4:遇到文本节点时触发                    /*case XmlPullParser.TEXT:                        //得到文本内容                       String text= parser.getText();                        System.out.println("text="+text);                        break;*/                    case XmlPullParser.END_TAG:                        //得到解析的标签名                        String endTag=parser.getName();                        System.out.println("endTag="+endTag);                        break;                }                //将事件流继续向后推进                eventType=parser.next();            }        } catch (Exception e) {            e.printStackTrace();        }    }}




更多相关文章

  1. Android之事件处理全面剖析
  2. Android 模拟滑动 MotionEvent touch事件
  3. Retrofit系列文章翻译7—在请求体里发送对象
  4. Android 事件拦截/分发机制 (图解+代码)
  5. Android 使用Parcelable序列化对象
  6. android设置软键盘搜索键以及监听搜索键点击事件
  7. Android 事件处理基于Handler 消息处理
  8. Android SharedPreferences 存储复杂对象

随机推荐

  1. Android(安卓)技术博客汇总
  2. android webview字体大小的控制
  3. 四十七、实现调用Android手机的拍照功能
  4. 获取android手机基本信息
  5. 介绍一个Android开源项目:GifView——Andr
  6. Android(安卓)APK安装过程及原理详解
  7. Android客户端连接tomcat时出错:connect f
  8. android颜色设使用方法
  9. 简单的中间文字两边按钮
  10. Android中的MessageQueue,Handler,Looper