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