Android 三种方式解析XML文件

我们要解析的XML文件

<?xml version="1.0" encoding="utf-8"?>
<students>
    <student sex="女">
        <name>李永进</name>
        <age>18</age>
    </student>
    <student sex="女">
        <name>任广</name>
        <age>28</age>
    </student>
    <student sex="男">
        <name>高阳</name>
        <age>38</age>
    </student>
</students>

一、Dom解析

package bw.com.xml;

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

import java.io.InputStream;
import java.util.ArrayList;

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

public class DomStudents {
    public static ArrayList<Students> Doms(InputStream inputStream){
        ArrayList<Students> arrayList = new ArrayList<>();

        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
            Document parse = documentBuilder.parse(inputStream);

            NodeList list = parse.getElementsByTagName("student");

            for (int i = 0;i<list.getLength();i++){
                Students students = new Students();
                Node item = list.item(i);
                NamedNodeMap attributes = item.getAttributes();
                students.sex = attributes.item(0).getNodeValue();

                NodeList childNodes = item.getChildNodes();
                for (int j = 0;j < childNodes.getLength();j++){
                    Node item1 = childNodes.item(j);

                    if(item1.getNodeName().equals("name")){

                        students.name = item1.getTextContent();

                    }else if(item1.getNodeName().equals("age")){

                        students.age = item1.getTextContent();

                    }
                }
                arrayList.add(students);
            }


        } catch (Exception e) {
            e.printStackTrace();
        }


        return arrayList;
    }
}

开启Dom

       InputStream open = getAssets().open("rivers.xml");
        ArrayList<Rivers> domr = DomRivers.domr(open);
        Log.d("domrivers",domr.toString());

二、Pull解析

package bw.com.xml;

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

import java.io.InputStream;
import java.util.ArrayList;

public class StudentXml {

     public static ArrayList<Students> studentsArrayList(InputStream inputStream){
         ArrayList<Students> arrayList = new ArrayList<>();;
         try {
             XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
             XmlPullParser xmlPullParser = xmlPullParserFactory.newPullParser();
             int eventType = xmlPullParser.getEventType();
             xmlPullParser.setInput(inputStream,"UTF-8");
             Students students = null;
          

             while (eventType != XmlPullParser.END_DOCUMENT){
                 switch (eventType){

                     case XmlPullParser.START_TAG:
                         if(xmlPullParser.getName().equals("student")){
                             students = new Students();
                             String attributeValue = xmlPullParser.getAttributeValue(0);
                             students.sex=attributeValue;
                         }else if(xmlPullParser.getName().equals("name")){

                             students.name = xmlPullParser.nextText();

                         }else if(xmlPullParser.getName().equals("age")){
                             students.age = xmlPullParser.nextText();
                         }

                         break;
                     case XmlPullParser.END_TAG:
                         if(xmlPullParser.getName().equals("student")) {
                             arrayList.add(students);
                         }
                         break;
                 }

                 eventType = xmlPullParser.next();
             }

         } catch (Exception e) {
             e.printStackTrace();
         }

         return arrayList;
     }
}

开启Pull

   try {
            InputStream open = getAssets().open("students.xml");
            ArrayList<Students> students = StudentXml.studentsArrayList(open);
            Log.d("student",students.toString());


        } catch (Exception e) {
            e.printStackTrace();
        }

二、Sax解析

package bw.com.xml;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import java.io.InputStream;
import java.util.ArrayList;

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

public class SaxStudentsXml {

    ArrayList<Students> arrayList = new ArrayList<>();;
    Students students;
    String s;

    public ArrayList<Students> saxstudent(InputStream inputStream) throws Exception {

        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
        SAXParser saxParser = saxParserFactory.newSAXParser();
        saxParser.parse(inputStream,new saxxml());

        return arrayList;
    }

    class saxxml extends DefaultHandler{
        @Override
        public void startDocument() throws SAXException {
            super.startDocument();
        }

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

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            super.startElement(uri, localName, qName, attributes);
            if(qName.equals("student")){
                students = new Students();
                String value = attributes.getValue(0);
                students.sex = value;

            }
        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            super.endElement(uri, localName, qName);
            if(qName.equals("student")){

                arrayList.add(students);

            }else if(qName.equals("name")){
                students.name = s;

            }else if(qName.equals("age")){
                students.age = s;
            }
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);
             s = new String(ch, start, length);
        }
    }

}

开启Sax

try {
            InputStream open = getAssets().open("students.xml");
            SaxStudentsXml saxStudentsXml = new SaxStudentsXml();
            ArrayList<Students> saxstudent = saxStudentsXml.saxstudent(open);
            Log.d("saxstudent",saxstudent.toString());


        } catch (Exception e) {
            e.printStackTrace();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值