天天看点

xml解析:Sax,Dom,pull解析

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