我们要解析的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();
}