各大解析的使用方法,为了省事,我将它们写在了一起.直接上代码喽
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);
}
}
}