XML解析(訪問數據接口) android使用的是基於事件模型
pullParser.setInput(inputstream,"utf-8");
int ev=pullParser.getEventType();
pullParser.getName()//獲取標籤名稱
pullParser.getAttributeValue(0);
pullParser.nextText();//節點後面的文本節點的文本值
pullParser.next();
示例:
try {
InputStream in=this.getAssets().open("students.xml");
//創建解析器
XmlPullParser parser= Xml.newPullParser();
//StringReader();
parser.setInput(in,"utf-8");//加載數據
boolean flag=true;
while(flag){
int type=parser.getEventType();
switch (type){
case XmlPullParser.START_TAG:
if(parser.getName().equals("name"))
Log.e("test",parser.nextText());//獲取文本
if(parser.getName().equals("student"))
Log.e("test",parser.getAttributeValue(0));//獲取屬性
break;
case XmlPullParser.START_DOCUMENT:
Log.e("test","開始");
break;
case XmlPullParser.END_DOCUMENT:
Log.e("test","結束");
flag=false;
break;
}
type=parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
把數據保存到xml:
XmlSerializer ser=Xml.newSerializer();
ser.setOutput(outputstream,"utf-8");
ser.startDocument("utf-8",true);//設置<? version, encoding>的值即開始節點,第二個是否單獨存在
ser.startTag(null,"persons");//生成開始標記,第一個爲命名空間,
ser.attribute(null,"id",p.getId());//設置屬性,第一個爲命名空間,第二個爲屬性名
ser.text(p.getName());
ser.endTag(null,"persons");//結束標記
ser.endDocument();//結束
案例:
try {
FileOutputStream out = this.openFileOutput("sxml.xlm",Context.MODE_PRIVATE);
XmlSerializer ser=Xml.newSerializer();
ser.setOutput(out,"utf-8");
ser.startDocument("utf-8",true);//設置<? version, encoding>的值即開始節點,第二個是否單獨存在
ser.startTag(null,"persons");//開始節點,第一個爲命名空間
for(int i=0;i<10;i++){
ser.startTag(null,"person");
ser.attribute(null,"id",i+1+"");//設置屬性,第一個爲命名空間,第二個爲屬性名
ser.startTag(null,"name");
ser.text("admin");
ser.endTag(null,"name");
ser.endTag(null,"person");
}
ser.endTag(null,"persons");//結束節點
ser.endDocument();//結束
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}