一、Pull解析:
1.在java中的使用方法:
1)首先InputStream ins = this.getClass().getClassLoader().
getResourceAsStream("xxx.xml");擷取到一個流對象
2)擷取xml的解析工廠對象XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
3)通過解析工廠擷取xml解析器XmlPullParser parser = factory.newPullParser();
4)綁定需要解析的xml檔案以及設定解編碼格式,應該與xml檔案的編碼格式一緻parser.setInput(ins, "UTF-8");
5)擷取解析指針指向的目前标簽類型int type = parser.getEventType();
6)通過指針周遊xml檔案while(type != XmlPullParser.END_DOCUMENT)在循環體内執行你需要的操作,别忘了執行完操作移動指針指向下一個标簽parser.next()
2.在Android中的使用方法:Android中的解析器構造方式與java不同因為都封裝好了
XmlPullParser xpp = Xml.newPullParser();其他的與java都一樣
Android中的代碼示例:
private void parseXMLwithPull(InputStream input) {
try {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(input,"UTF-8");
int type = parser.getEventType();
String id = "";
String name = "";
String version = "";
while (type != XmlPullParser.END_DOCUMENT) {
String nodeName = parser.getName();
switch (type) {
case XmlPullParser.START_TAG:
if ("id".equals(nodeName)) {
id = parser.nextText();
} else if ("name".equals(nodeName)) {
name = parser.nextText();
} else if ("version".equals(nodeName)) {
version = parser.nextText();
}
break;
case XmlPullParser.END_TAG:
if ("app".equals(nodeName)) {
Log.i("zhangdi",id);
Log.i("zhangdi",name);
Log.i("zhangdi",version);
}
break;
}
type = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
二、SAX解析:
1.建立一個SAXHandler類繼承DefaultHandler,重寫startDocument(開始xml解析的時候調用)、endDocument(結束xml解析的時候調用)、startElement(解析某個節點的時候調用)、endElement(完成解析某個節點的時候調用)以及characters(擷取節點内容的時候調用)這5個方法;
2.建構xml解析工廠XMLParserFactory factory = XMLParserFactory.newInstance();
3.通過解析工廠擷取XMLReader reader = factory.newSAXParser.getXMLReader();
4.設定reader的解析handler reader.setContentHandler(new SAXHandler());
5.解析資料reader.parse();
Android示例代碼:
1.SAXHandler:
public class SAXHandler extends DefaultHandler {
private String nodeName;
private StringBuilder id;
private StringBuilder name;
private StringBuilder version;
@Override
public void startDocument() throws SAXException {
super.startDocument();
id = new StringBuilder();
name = new StringBuilder();
version = new StringBuilder();
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
nodeName = localName;
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
if ("app".equals(localName)) {
Log.i("zhangdi",id.toString());
Log.i("zhangdi",name.toString());
Log.i("zhangdi",version.toString());
id.setLength(0);
name.setLength(0);
version.setLength(0);
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
if ("id".equals(nodeName)) {
id.append(ch, start, length);
} else if ("name".equals(nodeName)) {
name.append(ch, start, length);
} else if ("version".equals(nodeName)) {
version.append(ch, start, length);
}
}
}
2.具體解析步驟:
private void parseXMLwithSAX(String string) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader reader = factory.newSAXParser().getXMLReader();
SAXHandler handler = new SAXHandler();
reader.setContentHandler(handler);
reader.parse(new InputSource(new StringReader(string)));
} catch (Exception e) {
e.printStackTrace();
}
}