Pull方式解析Xml例子:
String mData = "<apps>\n" +
"<app>\n" +
"<id>1</id>\n" +
"<name>Google Maps</name>\n" +
"<version>1</version>\n" +
"<apps>\n" +
"<name>Google 1</name>\n" +
"<age>24</age>\n" +
"</apps>\n" +
"</app>\n" +
"<app>\n" +
"<id>2</id>\n" +
"<name>Chrome</name>\n" +
"<version>2.1</version>\n" +
"<apps>\n" +
"<name>Google 2</name>\n" +
"<age>34</age>\n" +
"</apps>\n" +
"</app>\n" +
"<app>\n" +
"<id>3</id>\n" +
"<name>Google Play</name>\n" +
"<version>3.1</version>\n" +
"<apps>\n" +
"<name>Google 3</name>\n" +
"<age>44</age>\n" +
"</apps>\n" +
"</app>\n" +
"</apps>";
private void pullParseXml(String data) {
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(new StringReader(data));
int type = parser.getEventType();
String nodeName;
while (type != XmlPullParser.END_DOCUMENT) {
nodeName = parser.getName();
switch (type) {
case XmlPullParser.START_TAG:
if("id".equals(nodeName)) {
log("id:" + parser.nextText());
} else if("name".equals(nodeName)) {
log("name:"+parser.nextText());
} else if("version".equals(nodeName)) {
log("version:"+parser.nextText());
}
break;
case XmlPullParser.END_TAG:
break;
default:
break;
}
type = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
SAX方式解析Xml例子:
先写一个SAX的Handler用来解析Xml数据
class SaxHandler extends DefaultHandler {
String nodeName;
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
nodeName = localName;
log("local name:"+localName);
log("q name:" +qName);
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
log(new String(ch, start, length));
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
}
private void saxParseXml(String data) {
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
XMLReader reader = factory.newSAXParser().getXMLReader();
reader.setContentHandler(new SaxHandler());
reader.parse(new InputSource(new StringReader(data)));
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}