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();