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

来源:互联网 发布:js截取字符串返回数组 编辑:程序博客网 时间:2024/06/01 08:18

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

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);        }    }}