android中Xml文件解析方法

1.XmlPullParser解析方式
xml文件格式:

<?xml version="1.0" encoding="utf-8"?>
<channel>
    <item id="0" url="http://www.baidu.com">百度</item>
    <item id="1" url="http://www.qq.com">腾讯</item>
    <item id="2" url="http://www.sina.com.cn">新浪</item>
    <item id="3" url="http://www.taobao.com">淘宝</item>
</channel>
package com.example.testafjalj;

import android.content.Context;
import android.content.res.AssetManager;
import android.util.Log;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.InputStream;

public class PullParserUtil {
    private static final String TAG = "PullParserUtil";

    public static void pullParserXmlMethod(Context context, String fileName, String nodeName) {
        AssetManager assetManager = null;
        InputStream inputStream = null;
        XmlPullParserFactory xmlPullParserFactory = null;
        XmlPullParser xmlPullParser = null;
        try {
            assetManager = context.getAssets();
            inputStream = assetManager.open(fileName);
            xmlPullParserFactory = XmlPullParserFactory.newInstance();
            xmlPullParser = xmlPullParserFactory.newPullParser();
            xmlPullParser.setInput(inputStream, "utf-8");
            int eventType = xmlPullParser.getEventType();
            StringBuilder node = new StringBuilder();
            StringBuilder attribute = new StringBuilder();
            StringBuilder content = new StringBuilder();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                switch (eventType) {
                    case XmlPullParser.START_TAG:
                        if (nodeName.equals(xmlPullParser.getName())) {
                            node.append(xmlPullParser.getName());
                            int count = xmlPullParser.getAttributeCount();
                            for (int i = 0; i < count; i++) {
                                attribute.append(xmlPullParser.getAttributeName(i)).append(" : ")
                                        .append(xmlPullParser.getAttributeValue(i)).append("#");
                            }
                            content.append(xmlPullParser.nextText());
                        }
                        break;
                    case XmlPullParser.TEXT:
                        Log.i(TAG, "get node is : " + node.toString() + " ; get attribute is : " + attribute.toString() + " ; get content is : " + content.toString());
                        node.setLength(0);
                        attribute.setLength(0);
                        content.setLength(0);
                        break;
                }
                eventType = xmlPullParser.next();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStream != null)
                    inputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}


 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread(new Runnable() {
            @Override
            public void run() {
                PullParserUtil.pullParserXmlMethod(MainActivity.this, LOCAL_ASSETS_FILE_NAME, "item");
            }
        }).start();
    }

2.Sax解析方式
xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<users>
    <user id="0">
        <name>Alexia</name>
        <age>23</age>
        <sex>Female</sex>
    </user>

    <user id="1">
        <name>Edward</name>
        <age>24</age>
        <sex>Male</sex>
    </user>

    <user id="2">
        <name>wjm</name>
        <age>23</age>
        <sex>Female</sex>
    </user>

    <user id="3">
        <name>wh</name>
        <age>24</age>
        <sex>Male</sex>
    </user>
</users>

package com.example.a10937959.testafjalj;

import android.content.Context;
import android.util.Log;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xmlpull.v1.XmlPullParser;

import java.io.InputStream;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class SaxParserUtil {
    public final static String TAG = "SaxParserUtil";

    public static void saxParserMethod(Context context, String fileName) {
        SAXParserFactory saxParserFactory = null;
        SAXParser saxParser = null;
        XMLReader xmlReader = null;
        InputStream inputStream = null;
        try {
            saxParserFactory = SAXParserFactory.newInstance();
            saxParser = saxParserFactory.newSAXParser();
            xmlReader = saxParser.getXMLReader();
            SaxParserHandler saxParserHandler = new SaxParserHandler();
            xmlReader.setContentHandler(saxParserHandler);
            inputStream = context.getAssets().open(fileName);
            xmlReader.parse(new InputSource(inputStream));
        } catch (Exception e) {

        }
    }

    private static class SaxParserHandler extends DefaultHandler {

        @Override
        public void startDocument() throws SAXException {
            super.startDocument();
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);
            Log.i(TAG, "characters ch is : " + String.valueOf(ch) + " ; start is : " + start + " ; length is : " + length);
        }

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            super.startElement(uri, localName, qName, attributes);
            Log.i(TAG, "start element uri is : " + uri + " ; localName is : " + localName + " ; qName is : " + qName + " ; attributes is : " + attributes);
        }

        @Override
        public void endDocument() throws SAXException {
            super.endDocument();
        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            super.endElement(uri, localName, qName);
            Log.i(TAG, "end element uri is : " + uri + " ; localName is : " + localName + " ; qName is : " + qName );
        }
    }
}

3.Dom解析
xml文件:

<?xml version="1.0" encoding="utf-8"?>
<users>
    <user id="0">
        <name>Alexia</name>
        <age>23</age>
        <sex>Female</sex>
    </user>

    <user id="1">
        <name>Edward</name>
        <age>24</age>
        <sex>Male</sex>
    </user>

    <user id="2">
        <name>wjm</name>
        <age>23</age>
        <sex>Female</sex>
    </user>

    <user id="3">
        <name>wh</name>
        <age>24</age>
        <sex>Male</sex>
    </user>
</users>

代码如下:

package com.example.a10937959.testafjalj;

import android.content.Context;
import android.util.Log;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

public class DocumentParseUtil {
    private final static String TAG = "DocumentParseUtil";

    public static void documentParseMethod(Context context, String fileName, String queryNode) {
        DocumentBuilderFactory documentBuilderFactory = null;
        DocumentBuilder documentBuilder = null;
        InputStream inputStream = null;
        try {
            documentBuilderFactory = DocumentBuilderFactory.newInstance();
            documentBuilder = documentBuilderFactory.newDocumentBuilder();
            inputStream = context.getAssets().open(fileName);
            Document document = documentBuilder.parse(inputStream);
            Element element = document.getDocumentElement();
            NodeList nodeList = element.getElementsByTagName(queryNode);
            Node node = null;
            if (nodeList != null) {
                for (int i = 0; i < nodeList.getLength(); i++) {
                    node = nodeList.item(i);
                    NodeList nodeList1 = node.getChildNodes();
                    if (nodeList1 != null && nodeList1.getLength() > 0) {
                        for (int j = 0; j < nodeList1.getLength(); j++) {
                            Node node1 = nodeList1.item(j);
                        }
                    } else {
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值