Android 解析XML 的三種方法
使用的是eclipse,android 平臺
</div>
Pull 解析
import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.util.Xml; import com.leo.sax_parser.model.Person; public class PullParser { public static List<Person> readXML(InputStream inputstream) throws XmlPullParserException, IOException { List<Person> persons = null; XmlPullParser parser = Xml.newPullParser(); parser.setInput(inputstream, "UTF-8"); int eventCode = parser.getEventType(); Person person = null; while (eventCode != XmlPullParser.END_DOCUMENT) { switch (eventCode) { case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>(); break; case XmlPullParser.START_TAG: if ("person".equals(parser.getName())) { person = new Person(); person.setId(parser.getAttributeValue(0)); }else if(person != null){ if ("name".equals(parser.getName())) { person.setName(parser.nextText()); }else if("age".equals(parser.getName())){ person.setAge(Integer.parseInt(parser.nextText())); }else if("phoneNumber".equals(parser.getName())){ person.setPhoneNumber(Integer.parseInt(parser.nextText())); } } break; case XmlPullParser.END_TAG: if ("person".equals(parser.getName()) && person!= null) { persons.add(person); person =null; } break; default: break; } eventCode = parser.next(); } return persons; } }
SAX 解析
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.util.Log; import com.leo.sax_parser.model.Person; public class SAX_handler extends DefaultHandler { private static final String Tag = "SAX_handler"; private List<Person> persons; private String perTag; private Person person; public List<Person> getPersons() { return persons; } @Override public void startDocument() throws SAXException { persons = new ArrayList<Person>();//初始化用于存放person對象的persons,用于存放讀取到的相應的信息。 Log.i(Tag, "startDocument"); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if ("person".equals(localName)) { for (int i = 0; i < attributes.getLength(); i++) { Log.i(Tag, "attributeName:" + attributes.getLocalName(i) + "attributeValue:" + attributes.getValue(i)); person = new Person(); person.setId(attributes.getValue(i)); } } perTag = localName; Log.i(Tag, qName + "startElement***"); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // super.characters(ch, start, length); String data = new String(ch, start, length); if (!"".equals(data.trim())) { Log.i(Tag, "Content:" + data); } if ("name".equals(perTag)) { person.setName(data); } else if ("age".equals(perTag)) { person.setAge(Integer.parseInt(data)); } else if ("phoneNumber".equals(perTag)) { person.setPhoneNumber(Integer.parseInt(data)); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { Log.i(Tag, qName + "endElement"); if (person != null&&"person".equals(localName)) { persons.add(person); person = null; } perTag = null; } @Override public void endDocument() throws SAXException { Log.i(Tag, "endDocument"); } }
Dom 解析
import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; 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 android.util.Log; import com.leo.sax_parser.model.Person; public class DomParser { private static final String Tag = "DomParser"; public static List<Person> readXMLByDom(InputStream input) throws ParserConfigurationException, SAXException, IOException { List<Person> persons = new ArrayList<Person>(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(input); Element root = document.getDocumentElement(); NodeList nodes = root.getElementsByTagName("person"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); Person person = new Person(); person.setId(element.getAttribute("id")); NodeList childNodes = element.getChildNodes(); Log.i(Tag, childNodes.getLength() + ""); for (int j = 0; j < childNodes.getLength(); j++) { Node child = childNodes.item(j); if (child.getNodeType() != Node.ELEMENT_NODE) { // 解決getChildNodes().getLength()與實際不符的問題 continue; } Element childElement = (Element) child; Log.i("DomParser", childElement.getNodeName() + ":" + childElement.getTextContent().trim()); if ("name".equals(childElement.getNodeName())) { person.setName(childElement.getTextContent().trim()); } else if ("age".equals(childElement.getNodeName())) { person.setAge(Integer.parseInt(childElement .getTextContent().trim())); } else if ("phoneNumber".equals(childElement.getNodeName())) { person.setPhoneNumber(Integer.parseInt(childElement .getFirstChild().getNodeValue())); } } persons.add(person); } return persons; } }
本文由用戶 Ned40F 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!