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,...