1.使用pull解析
1 package com.example.myxml; 2 3 import java.io.InputStream; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 import org.xmlpull.v1.XmlPullParser; 8 import org.xmlpull.v1.XmlPullParserFactory; 9 10 import android.util.Log; 11 import android.util.Xml; 12 13 public class Pullparser { 14 15 public static List<Person> getPerson(InputStream inStream) throws Exception { 16 List<Person> psonList = new ArrayList<Person>(); 17 Person person = null; 18 XmlPullParser xmlParse = Xml.newPullParser(); 19 try { 20 xmlParse.setInput(inStream, "utf-8"); 21 int evnType = xmlParse.getEventType(); 22 while (evnType != XmlPullParser.END_DOCUMENT) { 23 switch (evnType) { 24 case XmlPullParser.START_TAG: 25 String tag = xmlParse.getName(); 26 if (tag.equalsIgnoreCase("person")) { 27 person = new Person(); 28 person.setId(Integer.parseInt(xmlParse.getAttributeValue(0))); 29 } else if (person != null) { 30 // parse after tag 31 if (tag.equalsIgnoreCase("name")) { 32 person.setName(xmlParse.nextText()); 33 } else if (tag.equalsIgnoreCase("age")) { 34 person.setAge(xmlParse.nextText()); 35 } 36 } 37 break; 38 case XmlPullParser.END_TAG: 39 if (xmlParse.getName().equalsIgnoreCase("person") 40 && person != null) { 41 psonList.add(person); 42 person = null; 43 } 44 break; 45 default: 46 break; 47 } 48 evnType = xmlParse.next(); 49 } 50 } catch (Exception e) { 51 } 52 return psonList; 53 } 54 }
2.使用DOM解析
package com.example.myxml; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import android.annotation.SuppressLint; public class DOMparser { @SuppressLint("UseValueOf") public static List<Person> parse(InputStream inStream) throws Exception { List<Person> persons = new ArrayList<Person>(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(inStream); Element root = document.getDocumentElement(); NodeList personNodes = root.getElementsByTagName("person"); for (int i = 0; i < personNodes.getLength(); i++) { Element personElement = (Element) personNodes.item(i); int id = new Integer(personElement.getAttribute("id")); Person person = new Person(); person.setId(id); NodeList childNodes = personElement.getChildNodes(); for (int y = 0; y < childNodes.getLength(); y++) { if (childNodes.item(y).getNodeType() == Node.ELEMENT_NODE) { if ("name".equals(childNodes.item(y).getNodeName())) { String name = childNodes.item(y).getFirstChild().getNodeValue(); person.setName(name); }else if ("age".equals(childNodes.item(y).getNodeName())) { String age = childNodes.item(y).getFirstChild().getNodeValue(); person.setAge(age); } } } persons.add(person); } inStream.close(); return persons; } }
3.使用SAX解析
package com.example.myxml; import java.util.ArrayList; import java.util.List; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import android.annotation.SuppressLint; public class SAXparser extends DefaultHandler { private List<Person> persons; private Person person; private String preTAG; @Override public void startDocument() throws SAXException { persons = new ArrayList<Person>(); } @Override public void characters(char[] ch, int start, int length)throws SAXException { if (person != null) { String data = new String(ch, start, length); if ("name".equals(preTAG)) { person.setName(data); } else if ("age".equals(preTAG)) { person.setAge(data); } } } @SuppressLint("UseValueOf") @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if ("person".equals(localName)) { person = new Person(); person.setId(new Integer(attributes.getValue(0))); } preTAG = localName; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if ("person".equals(localName) && person != null) { persons.add(person); person = null; } preTAG = null; } public List<Person> getPersons() { return persons; } }
案例辅助代码
xML文件
<?xml version="1.0" encoding="UTF-8"?> <persons> <person id="23"> <name>张三</name> <age>54</age> </person> <person id="20"> <name>小明</name> <age>266</age> </person> </persons>
读取本地XML文件流
package com.example.myxml; import java.io.InputStream; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { TextView resultView; List<Person> personList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); resultView = (TextView) findViewById(R.id.result); InputStream inStream = MainActivity.class.getClassLoader().getResourceAsStream("personxml.xml"); // SAX_Parser(inStream); // DOM_Parser(inStream); PULL_Parser(inStream); visity(); } private void PULL_Parser(InputStream inStream) { try { personList= Pullparser.getPerson(inStream); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void DOM_Parser(InputStream inStream) { try { personList = DOMparser.parse(inStream); } catch (Exception e) { e.printStackTrace(); } } private void SAX_Parser(InputStream inStream) { try { // 得到SAX解析器的工厂实例 SAXParserFactory spf = SAXParserFactory.newInstance(); // 从SAX工厂实例中获得SAX解析器 SAXParser saxParser = spf.newSAXParser(); SAXparser handler = new SAXparser(); saxParser.parse(inStream, handler); inStream.close(); personList = handler.getPersons(); } catch (Exception e) { } } public void visity(){ if(personList!=null){ StringBuilder sb = new StringBuilder(); for (Person person : personList) { sb.append(person.toString()).append("\n"); } resultView.setText(sb.toString()); }else{ Toast.makeText(getApplicationContext(), "null", 0).show(); } } }