常见的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:Parcelable接口
  2. Retrofit系列文章翻译7—在请求体里发送对象
  3. Handler机制深入解析
  4. Android(安卓)新闻客户端案例
  5. 将 cglib 动态代理思想带入 Android(安卓)开发
  6. Android(安卓)Recovery 解析
  7. Android(安卓)Wifi获取组播
  8. android操作XML的几种方式
  9. Android2.2应用解析

随机推荐

  1. INSTALL_FAILED_OLDER_SDK
  2. Android 2.2 API 中文文档系列(2) —— Edi
  3. 如果Android系统被收回
  4. android下可执行文件的真面目
  5. android 多语言(在APP里面内切换语言)
  6. android UI入门一
  7. Android 图片在SD卡及包下的存储
  8. Android Studio打包APK时出现android stu
  9. Android获取当前运行的service
  10. Android处理图片