Android 三种方式解析XML文件

    xiaoxiao2022-07-05  164

    我们要解析的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(); }
    最新回复(0)