XML 4種解析方式示例
功能分類:工具
支持平臺(tái):Android
運(yùn)行環(huán)境:Eclippse
開(kāi)發(fā)語(yǔ)言:Java
開(kāi)發(fā)工具:Eclippse
源碼大?。?3.01MB
源碼簡(jiǎn)介
android中XML文件解析方式的一個(gè)匯總示例。
其中包括dom解析、dom4j解析、pull解析和SAX解析對(duì)示例xml文件進(jìn)行解析的具體實(shí)現(xiàn)步驟,并有詳細(xì)的注釋。該實(shí)例將xml文件解析為實(shí)體類,并通過(guò)pstView進(jìn)行展現(xiàn)。
注:其中dom4j解析需要附加類庫(kù):dom4j-1.6.1.jar,壓縮包中給出了完整的dom4j的類庫(kù)。如果只做解析,只要引入dom4j-1.6.1.jar即可。
源碼運(yùn)行截圖
點(diǎn)擊不同按鈕會(huì)通過(guò)不同方式進(jìn)行解析,不過(guò)展示效果相同
解析完成后通過(guò)pstview展現(xiàn)
點(diǎn)擊條目展現(xiàn)詳細(xì)信息(來(lái)自xml文件的內(nèi)容)
源碼片段
/**android內(nèi)置了pull解析,相對(duì)dom解析來(lái)說(shuō)pull更省內(nèi)存.*/
pubpc class XmlPullParserUtil {
pubpc static Arraypst<cdentity> pullParser(InputStream in){
Arraypst<cdentity> cds = null;
try {
//構(gòu)建pull解析工廠
XmlPullParserFactory factory;
factory = XmlPullParserFactory.newInstance();
//構(gòu)建pull解析器對(duì)象
XmlPullParser parser = factory.newPullParser();
//設(shè)置解析器的數(shù)據(jù)源
parser.setInput(new InputStreamReader(in));
//獲取事件,開(kāi)始進(jìn)行解析
int eventType = parser.getEventType();
//將要生成的CD對(duì)象
CDEntity entity = null;
//循環(huán)遍歷xml文檔,直到遍歷到文檔末尾
while(eventType != XmlPullParser.END_DOCUMENT){
switch(eventType){
//在xml文檔開(kāi)始的時(shí)候構(gòu)建Arraypst對(duì)象。
case XmlPullParser.START_DOCUMENT:
cds = new Arraypst<cdentity>();
break;
//在標(biāo)簽開(kāi)始時(shí)對(duì)標(biāo)簽名進(jìn)行判斷
case XmlPullParser.START_TAG:
String name = parser.getName();
//標(biāo)簽名為CD時(shí),構(gòu)建CD對(duì)象
if("CD".equals(name)){
entity = new CDEntity();
//如果標(biāo)簽為title,則cd肯定不為空,且獲取到的文本為cd標(biāo)題,則將cd的標(biāo)題屬性設(shè)置為title標(biāo)簽的文本
}else if("TITLE".equals(name)){
entity.setTitle(parser.nextText());
}else if("ARTIST".equals(name)){
entity.setArtist(parser.nextText());
}else if("COUNTRY".equals(name)){
entity.setCountry(parser.nextText());
}else if("COMPANY".equals(name)){
entity.setCompany(parser.nextText());
}else if("PRICE".equals(name)){
entity.setPrice(Float.parseFloat(parser.nextText()));
}else if("YEAR".equals(name)){
entity.setYear(Integer.parseInt(parser.nextText()));
}
break;
//標(biāo)簽結(jié)束后,判斷結(jié)束標(biāo)簽是什么。如果cd標(biāo)簽結(jié)束,則生成cd對(duì)象完成,應(yīng)該將其添加到Arraypst中
case XmlPullParser.END_TAG:
if("CD".equals(parser.getName())){
cds.add(entity);
}
break;
}
//循環(huán)處理結(jié)束后,需要將標(biāo)簽設(shè)置為下一個(gè)標(biāo)簽,避免無(wú)限循環(huán)
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(cds);
return cds;
}
}
</cdentity></cdentity></cdentity>