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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!