Sax
1.startDocument()文档开始
2.endDocument()文档结束
3.startElement(String namespaceURI,String localName,String qName,Attributes atts);
元素开始,localName是元素名
1.4endElement(String uri, String localName, String name)事件
1.5characters(char[] ch, int start, int length)
SAXParserFactory spf = SAXParserFactory.newInstance();//工厂
SAXParser saxParser = spf.newSAXParser();//解析器
//XMLContextHandler extends DeafaultHandler
XMLContextHandler handler = new XMLContextHandler();
saxParser.parse(inStream,handler);
inStream.close();
return handler.getPersons();
每当遍历到文本节点时,会触发该事件
public void characters(char[] ch,int start,in length);
DOM
DocumentBuilder builder = DocumentBuilderFactory.newDocumentBuilder();
Document dom = builder.parse(inStream);
Element root = dom.getDocumentElement();
NodeList items = root.getElementsByTagName("person");//查找所有person节点
for(...){
Node = ...
((Element)node).getAttribute("id");
if(node.getNodeType == Node.ELEMENT_NODE){
...
}
}
/*
* 取得文本节点
*/
node.getTextContext();
Android-Pull解析Xml
Android内置的pull解析器解析XML文件.Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE,如果用在javaEE需要把其jar文件放入路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。Android系统本省使用到的各种xml文件,其内部也是采用Pull解析器进行解析的,Pull解析器的运行方式与SAX解析器相似。它提供了类似的时间,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是,Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。
XmlPullParser parser = Xml.newPullParser();
parser.setInput(inStream, "UTF-8");
int etype = parser.getEventType();
while (etype != XmlPullParser.END_DOCUMENT) {
switch (etype) {
case XmlPullParser.START_DOCUMENT:
parser.getName();
case XmlPullParser.START_TAG:
}
etype = parse.next();
}