各大解析:pull解析,pull解析(带属性),dom解析,sax解析

各大解析的使用方法,为了省事,我将它们写在了一起.直接上代码喽

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.bw.lenovo.xmljiexi_demo.MainActivity">

    <Button
        android:id="@+id/pull_btn"
        android:onClick="onClick"
        android:text="Pull解析"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/pull_phone_btn"
        android:onClick="onClick"
        android:text="pull带属性的解析y"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/Dom_btn"
        android:onClick="onClick"
        android:text="Dom解析"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/sax_btn"
        android:onClick="onClick"
        android:text="sax解析"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

Phone.xml

<?xml version="1.0" encoding="UTF-8"?>
<Phone>
    <phone id="1" name="华为1"  price="2000">
        <RAM>1</RAM>
    </phone>

    <phone id="2" name="华为2"  price="2000">
        <RAM>2</RAM>
    </phone>

    <phone id="3" name="华为3"  price="2000">
        <RAM>3</RAM>
    </phone>

    <phone id="4" name="华为4"  price="2000">
        <RAM>4</RAM>
    </phone>

</Phone>

Student.xml

<?xml version="1.0" encoding="UTF-8"?>
<Student>
    <student>
        <no>15090001</no>
        <name>小苏</name>
        <age>18</age>
    </student>
    <student>
        <no>15090001</no>
        <name>小苏</name>
        <age>18</age>
    </student>
    <student>
        <no>15090001</no>
        <name>小苏</name>
        <age>18</age>
    </student>
</Student>

Phone

package com.bw.lenovo.xmljiexi_demo;

public class Phone {
    private String name;
    private int price;
    private int ARM;

    public Phone() {
        this.name = name;
        this.price = price;
        this.ARM = ARM;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getARM() {
        return ARM;
    }

    public void setARM(int ARM) {
        this.ARM = ARM;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "name='" + name + '\'' +
                ", price=" + price +
                ", ARM=" + ARM +
                '}';
    }
}

Student

package com.bw.lenovo.xmljiexi_demo;

/**
 * Created by lenovo on 2017/11/16.
 */
public class Student {
    private String no;
    private String name;
    private int age;


    public Student() {
        this.no = no;
        this.name = name;
        this.age = age;
    }

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "no='" + no + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

MyHandler

package com.bw.lenovo.xmljiexi_demo;

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

import java.util.ArrayList;


public class MyHandler extends DefaultHandler{
    ArrayList<Student> list = new ArrayList<Student>();
    Student stu = new Student();
    String tageName;//用来记录正在解析的标签

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        switch (tageName){
            case "no":
                stu.setNo(new String(ch,start,length));
                break;
            case "name":
                stu.setName(new String(ch,start,length));
                break;
            case "age":
                stu.setAge(Integer.parseInt(new String(ch,start,length)));
                break;
        }
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if (qName.equals("student")){
            stu = new Student();
        }
        tageName = qName;
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        if (qName.equals("student")){
            list.add(stu);
        }
        tageName = "";
    }
    /*
    文件开始解析结束时调用,不做操作
     */

    @Override
    public void endDocument() throws SAXException {
    }
}

Data

public class Data {
    private String title;
    private String url;

    public Data(String title, String url) {
        this.title = title;
        this.url = url;
    }
    public Data(){

    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    @Override
    public String toString() {
        return "Data{" +
                "title='" + title + '\'' +
                ", url='" + url + '\'' +
                '}';
    }
}

Dog

package com.bw.lenovo.xmljiexi_demo.demo;


public class Dog {
    private int id;
    private String name;
    private int age;

    public Dog(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Dog() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

Main2Activity

package com.bw.lenovo.xmljiexi_demo.demo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.bw.lenovo.xmljiexi_demo.R;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        initJson1();
        initJson2();
        initJson3();
        initJson4();
    }

    private void initJson4() {

        String str = "{'list':[{'id':1,'name':'旺财','age':2},{'id':2,'name':'花花','age':3},{'id':3,'name':'小黑','age':4}]}";
        ArrayList<Dog> list = new ArrayList<>();
        try {
            JSONObject jo = new JSONObject(str);
            JSONArray ja = jo.getJSONArray("list");
            for (int i = 0; i < ja.length(); i++) {
                JSONObject jo1 = ja.getJSONObject(i);
                int id = jo1.getInt("id");
                String name = jo1.getString("name");
                int age = jo1.getInt("age");
                Dog dog = new Dog(id,name,age);
                list.add(dog);

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

    }

    private void initJson3() {
        String str = "{'dog1':{'id':1,'name':'旺财','age':2},'dog2':{'id':2,'name':'花花','age':3},'dog3':{'id':3,'name':'小黑','sex':'男','age':4}}";
        try {
            JSONObject jo = new JSONObject(str);
            JSONObject jo1 = jo.getJSONObject("dog1");
            int id1 = jo1.getInt("id");
            String name1 = jo1.getString("name");
            int age1 = jo1.getInt("age");
            Dog dog1 = new Dog(id1,name1,age1);

            JSONObject jo2 = jo.getJSONObject("dog2");
            int id2 = jo2.getInt("id");
            String name2 = jo2.getString("name");
            int age2 = jo2.getInt("age");
            Dog dog2 = new Dog(id1,name1,age1);


            JSONObject jo3 = jo.getJSONObject("dog3");
            int id3 = jo3.getInt("id");
            String name3 = jo3.getString("name");
            int age3 = jo3.getInt("age");
            String sex = jo3.getString("sex");
            Dog dog3 = new Dog(id1,name1,age1);
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

    private void initJson2() {

        String str = "{'dog':{'id':13,'name':'小花','age':2}}";
        try {
            JSONObject jo = new JSONObject(str);
            JSONObject jo1 = jo.getJSONObject("dog");
            int id = jo1.getInt("id");
            String name = jo1.getString("name");
            int age = jo1.getInt("age");
            Dog dog = new Dog(id,name,age);
            Log.d("lsc", "initJson2: "+dog.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

    private void initJson1() {

        String str = "{'id':12,'name':'旺财','age':1}";

        try {
            JSONObject jo = new JSONObject(str);
            int id = jo.getInt("id");
            String name = jo.getString("name");
            int age = jo.getInt("age");
            Dog dog = new Dog(id,name,age);
            Log.d("lsc", "initJson1: "+dog.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
}

PareUtils

package com.bw.lenovo.xmljiexi_demo.demo;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

/**
 * Created by lenovo on 2017/11/16.
 */

public class PareUtils {
    public static ArrayList<Data> getDatas(String str){
        ArrayList<Data> list = new ArrayList<>();
        try {
            JSONObject jo = new JSONObject(str);
            JSONArray ja = jo.getJSONArray("itemList");
            for (int i = 0; i < ja.length(); i++) {
                JSONObject jo1 = ja.getJSONObject(i);
                JSONObject jo2 = jo1.getJSONObject("data");
                String title = null;
                if (jo2.has("title")){
                     title = jo2.getString("title");
                }
                String url = null;
                if (jo2.has("playInfo")){
                    JSONArray ja2 = jo2.getJSONArray("playInfo");
                    for (int j = 0; j < ja2.length(); j++) {
                        JSONObject jo3 = ja2.getJSONObject(j);
                        String name = jo3.getString("name");
                        if(name.equals("高清")){
                            url = jo3.getString("url");
                        }
                    }
                }
                Data data = new Data(title,url);
                list.add(data);
            }

            return list;
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }
}

MainActivity

package com.bw.lenovo.xmljiexi_demo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClick(View view) throws IOException, SAXException, ParserConfigurationException, XmlPullParserException {
        switch (view.getId()){
            case R.id.pull_btn:
                pullXMlstuJieXi();//pull解析
                break;
            case R.id.pull_phone_btn://pull解析 带属性
                pullXmlPhoneJieXi();
                break;
            case R.id.Dom_btn://dom解析
                domXmlStudentJieXi();
                break;
            case R.id.sax_btn:
                saxXmlStudentJieXi();//sax解析
                break;
        }

    }


    private void domXmlStudentJieXi() throws ParserConfigurationException,IOException,SAXException {
        List<Student> students = new ArrayList<>();
        //获取DOM解析器工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        //获取DOM解析器
        DocumentBuilder builder = factory.newDocumentBuilder();
        //将解析树放入内存,通过返回值Document来描述结果
        Document document = builder.parse(getResources().getAssets().open("Student.xml"));
        //获取根元素<</Student>>
        Element root = document.getDocumentElement();
        //取得所有student节点集合
        NodeList personNodes = root.getElementsByTagName("student");
        for (int i = 0; i < personNodes.getLength(); i++) {
            Student stu = new Student();
            //取得student节点元素
            Element personElement = (Element) personNodes.item(i);
            //取得属性值并设置ID
//            stu.setNo(personElement.getAttribute("no"));
//            stu.setName(personElement.getAttribute("name"));
//            stu.setAge(Integer.parseInt(personElement.getAttribute("age")));
            //获取person的子节点
            NodeList personChilds = personElement.getChildNodes();
            for (int j = 0; j < personChilds.getLength(); j++) {
                //判断person当前节点是否是元素类型的节点
                if (personChilds.item(j).getNodeType() == Node.ELEMENT_NODE) {
                    {
                        Element childElement = (Element) personChilds.item(j);
                        String nodeName = childElement.getNodeName();
                        switch (nodeName) {
                            case "no":
                                //获取节点的值
                                stu.setNo(childElement.getFirstChild().getNodeValue());
                                break;
                            case "name":
                                stu.setName(childElement.getFirstChild().getNodeValue());
                                break;
                            case "age":
                                stu.setAge(Short.parseShort(childElement.getFirstChild().getNodeValue()));
                                break;
                        }
                    }
                }
                students.add(stu);
            }
            for (Student stu2 : students) {
                Log.d("lsc", "domXmlStudentJieXi: " + stu);
            }

        }
    }

    private void saxXmlStudentJieXi() throws ParserConfigurationException,SAXException,IOException{
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        MyHandler mh = new MyHandler();
        sp.parse(getResources().getAssets().open("Student.xml"),mh);
        ArrayList<Student> list = mh.list;
        for (Student student : list) {
            Log.d("lsc", "saxXmlStudentJieXi: "+student);
        }

    }

    private void pullXmlPhoneJieXi() throws XmlPullParserException,IOException{
        //解析工厂
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        //解析器
        XmlPullParser parser = factory.newPullParser();
        Phone phone = null;
        int e = XmlPullParser.START_DOCUMENT;
        ArrayList<Phone> list = new ArrayList<Phone>();
        parser.setInput(getResources().getAssets().open("Phone.xml"), "UTF-8");
        String name;
        while (e!=XmlPullParser.END_DOCUMENT) {
            name = parser.getName();
            switch (e) {
                case XmlPullParser.START_TAG:
                    switch (name) {
                        case "phone":
                            phone = new Phone();
                            for (int i = 0; i < parser.getAttributeCount(); i++) {
                                switch (parser.getAttributeName(i)) {
                                    case "name":
                                        phone.setName(parser.getAttributeValue(i));
                                        break;
                                    case "price":
                                        phone.setPrice(Integer.parseInt(parser.getAttributeValue(i)));
                                        break;
                                }
                            }
                            break;
                        case "RAM":
                            phone.setARM(Integer.parseInt(parser.nextText()));
                            break;
                    }

                    break;

                case XmlPullParser.END_TAG:
                    if(name.equals("phone")){
                        list.add(phone);
                    }
                    break;

            }
            e = parser.next();
        }

        for (Phone phone2 : list) {
            Log.d("sxl", "pullXmlPhoneJieXi: "+phone2);
        }

    }
    private void pullXMlstuJieXi() throws XmlPullParserException, IOException {
        XmlPullParserFactory xpf = XmlPullParserFactory.newInstance();
        //解析器
        XmlPullParser xpp = xpf.newPullParser();
        xpp.setInput(getResources().getAssets().open("Student.xml"),"UTF-8");
        ArrayList<Student> list = new ArrayList<Student>();
        //获得事件类型
        int e = xpp.getEventType();

        Student stu=null;
        while (e!=XmlPullParser.END_DOCUMENT) {
            switch (e) {
                case XmlPullParser.START_TAG:
                    String name = xpp.getName();
                    switch (name) {
                        case "student":
                            stu= new Student();
                            break;

                        case "no":
                            stu.setNo(xpp.nextText());
                            break;

                        case "name":
                            stu.setName(xpp.nextText());
                            break;

                        case "age":
                            stu.setAge(Integer.parseInt(xpp.nextText()));
                            break;



                    }
                    break;

                case XmlPullParser.END_TAG:
                    String name1 = xpp.getName();
                    switch (name1) {
                        case "student":
                            list.add(stu);
                            break;
                    }
                    break;

            }
            //移动到下一个
            e = xpp.next();

        }

        for (Student s : list) {
            Log.d("sxl", "pullXMlJieXi: "+s);
        }

    }



}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值