xml 解析的三種方法

2021-08-31 12:54:01 字數 3722 閱讀 5853

dom解析:

public class dompersonservice

public static listreadxml(inputstream instream) throws exception

listpersons=new arraylist();

//例項化乙個文件構建器工廠

documentbuilde***ctory factory = documentbuilde***ctory.newinstance();

//通過文件構建器工廠獲取乙個文件構建器

documentbuilder builder = factory.newdocumentbuilder();

//通過文件通過文件構建器構建乙個文件例項

document document = builder.parse(instream);

element root = document.getdocumentelement();

//獲取所有"pre:person"節。點

nodelist nodes = root.getelementsbytagname("pre:person");

for(int i = 0 ;i < nodes.getlength();i++)

element personelement = (element)nodes.item(i);

person person =new person();

person.setid(integer.valueof(personelement.getattribute("id")));

nodelist childnodes = personelement.getchildnodes();

for(int j = 0;jnode childnode = (node)childnodes.item(j);

if (childnode.getnodetype()==node.element_node)

element childelement = (element)childnode;

if ("name".equals(childelement.getnodename()))

person.setname(childelement.getfirstchild().getnodevalue());

else if (("age".equals(childelement.getnodename())))

person.setage(new short(childelement.getfirstchild().getnodevalue()));

persons.add(person);

return persons;

呼叫此類測試:

public class dompersonservicetest extends androidtestcase

} }

sax解析:

public class saxpersonservice

} 關鍵是要實現這個方法:

public class xmlcontenthandler extends defaulthandler

@override

public void startdocument() throws saxexception

/**

* uri:命名空間

* localname:不帶命名空間字首的標籤名

* qname:帶命名空間字首的標籤名

* attributes:屬性集合

*/@override

public void startelement(string uri, string localname, string qname, attributes attributes) throws saxexception

pretag = localname;

log.i(tag, "解析元素:"+localname); }

/*** ch:內容

* start:其實位置

* length:長度

*/@override

public void characters(char ch, int start, int length) throws saxexception

else if ("age".equals(pretag))

} log.i(tag, "解析內容:"+new string(ch, start,length)); }

@override

public void endelement(string uri, string localname, string qname) throws saxexception

pretag = null;

log.i(tag, localname + "解析完畢"); }

@override

public void enddocument() throws saxexception

} 呼叫測試:

public class saxpersonservicetest extends androidtestcase

}

}

3 pull解析

public class pullpersonservice

else if(null!=person)

else if("age".equals(parser.getname()))

} break;

case xmlpullparser.end_tag: //結束元素

if ("person".equals(parser.getname())&&person!=null)

break; }

eventcode=parser.next(); }

return persons; }

}呼叫測試

public class pullpersonservicetest extends androidtestcase

} }

要解析的檔案:

person.xml

<?xml version="1.0" encoding="utf-8"?>

coolszy

22

kuka

22

如果為網路的話,可以直接獲得流:

inputstream inputstream = urlconn.getinputstream();

解析的內容儲存:

public class person

public person(integer id, string name, short age)

public integer getid()

public void setid(integer id)

public string getname()

public void setname(string name)

public short getage()

public void setage(short age)

@override

public string tostring()

}

XML的解析中的三種方法

文章的出處為 在android中提供了三種解析xml的方式 sax api xml dom document objrectmodel 以及android推薦的pull解析方式.下面就對三種解析方式一一詳細闡述。假設要要解析person.xml文件 zhangsan 21lisi 22wangwu ...

xml的三種解析方法

xml主要有三種解析方式分別為dom sax 還有xmlpull,先來說下各自的優缺點。1 dom解析的特點是將整個xml文件以樹形結構放入到記憶體中,是官方推薦標準,優點是在記憶體中可以增刪改查,缺點是當檔案過大是可能會記憶體溢位。2 sax解析是一行一行的進行解析,是程式設計師社群開發出來的,優...

Android 三種XML檔案解析方法

xml檔案 代表資料 有結構描述 1 dom解析 public listloadpersons catch exception e return list sax解析 public listloadpersons override public void endelement string uri,...