package com.google.mcommerce.sample.android.chapter11.xml; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; 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; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.util.Log; import android.util.Xml; import com.google.mcommerce.sample.android.chapter11.entity.User; public class XMLUtil { private static final String TAG = "UserUtil"; public static String getStringByUrl(String url) { StringBuilder builder = new StringBuilder(); HttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); try { HttpResponse response = client.execute(httpGet); StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); if (statusCode == 200) { HttpEntity entity = response.getEntity(); InputStream content = entity.getContent(); BufferedReader reader = new BufferedReader( new InputStreamReader(content)); String line; while ((line = reader.readLine()) != null) { builder.append(line); } } else { Log.e(TAG, "Failed to download file"); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return builder.toString(); } public static User readSingleUserByDOM(String userXML) { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder; User user = new User(); try { dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(userXML); doc.getDocumentElement().normalize(); Node userNode = doc.getElementsByTagName("user").item(0); if (userNode.getNodeType() == Node.ELEMENT_NODE) { Element userElement = (Element) userNode; user.setNick(userElement.getElementsByTagName("nick").item(0) .getFirstChild().getNodeValue()); user.setCity(userElement.getElementsByTagName("city").item(0) .getFirstChild().getNodeValue()); } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return user; } public static ArrayList<User> readMultiUserByDOM(String url) { ArrayList<User> users = new ArrayList<User>(); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder; try { dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(url); doc.getDocumentElement().normalize(); NodeList nList = doc.getElementsByTagName("user"); for (int n = 0; n < nList.getLength(); n++) { Node nNode = nList.item(n); User user = new User(); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element userElement = (Element) nNode; user.setNick(userElement.getElementsByTagName("nick") .item(0).getFirstChild().getNodeValue()); user.setCity(userElement.getElementsByTagName("city") .item(0).getFirstChild().getNodeValue()); users.add(user); } } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return users; } public static ArrayList<User> readMultiUserBySAX(String url) { SAXParserFactory factory = SAXParserFactory.newInstance(); ArrayList<User> users = new ArrayList<User>(); try { SAXParser saxParser = factory.newSAXParser(); XMLReader xmlReader = saxParser.getXMLReader(); XMLHandler handler = new XMLHandler(); xmlReader.setContentHandler(handler); xmlReader.parse(new InputSource(new URL(url).openStream())); users = handler.getUsers(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return users; } public static ArrayList<User> readMultiUserByPULL(String url) { ArrayList<User> users = null; // XmlPullParser解析器 XmlPullParser parser = Xml.newPullParser(); try { parser.setInput(new StringReader(getStringByUrl(url))); int eventType = parser.getEventType(); // 创建一个User对象 User user = null; // 开始解析 while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT: users = new ArrayList<User>(); break; case XmlPullParser.START_TAG: // 判断当前元素名是否为user if ("user".equals(parser.getName())) { user = new User(); } else if ("nick".equals(parser.getName())) { user.setNick(parser.nextText()); } else if ("city".equals(parser.getName())) { user.setCity(parser.nextText()); } break; case XmlPullParser.END_TAG: if ("user".equals(parser.getName()) && user != null) { users.add(user); user = null; } break; } eventType = parser.next(); } } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return users; } }