11.Android-Xml读写
程序员文章站
2024-01-19 20:30:34
android中写XML时,需要用到XmlSerializer类 解析XML时,则需要用到XmlPullParser类 1.XmlSerializer类介绍 通过Xml.newSerializer()来获取XmlSerializer XmlSerializer常用方法如下所示: void setOu ......
android中写xml时,需要用到xmlserializer类
解析xml时,则需要用到xmlpullparser类
1.xmlserializer类介绍
通过xml.newserializer()来获取xmlserializer
xmlserializer常用方法如下所示:
void setoutput(outputstream os, string encoding); //设置要写入的xml的文件位置,以及encoding编码格式 //比如: //file file = new file(environment.getexternalstoragedirectory(), "text.xml"); //xmlserializer.setoutput(new fileoutputstream(file), "utf-8"); void startdocument(string encoding, boolean standalone); //设置文档开头描述,比如:" <?xml version="1.0" encoding="utf-8" standalone="yes"?>" // standalone:表示该xml是否是独立的,默认为true,如果填为false,则表示该xml被外部文件dtd约束 starttag(string namespace, string name); //写入开始元素标签 endtag(string namespace, string name); //写入结束元素标签 attribute(string namespace, string name, string value); //往元素标签里写属性(name="value"),比如<name id="123">
text(string text); //往元素里添加内容,比如: <name id="123">张三</name>
示例代码如下:
private void writepersonxml(){ xmlserializer serializer = xml.newserializer(); try { serializer.setoutput(openfileoutput("persons.xml", mode_private), "utf-8"); serializer.startdocument("utf-8", true); serializer.starttag(null,"persons"); //创建两个成员 serializer.starttag(null,"person"); serializer.attribute(null, "id", "1"); //添加编号 serializer.starttag(null,"姓名"); serializer.text("张三"); serializer.endtag(null,"姓名"); serializer.starttag(null,"age"); serializer.text("17"); serializer.endtag(null,"age"); serializer.endtag(null,"person"); serializer.starttag(null,"person"); serializer.attribute(null, "id", "2"); //添加编号 serializer.starttag(null,"姓名"); serializer.text("李四"); serializer.endtag(null,"姓名"); serializer.starttag(null,"age"); serializer.text("19"); serializer.endtag(null,"age"); serializer.endtag(null,"person"); serializer.endtag(null,"persons"); serializer.enddocument(); //结束文档,并将内容写入文件 } catch (exception e) { // todo auto-generated catch block e.printstacktrace(); } }
运行后,生成persons.xml:
接下来,我们便通过xmlpullparser来解析persons.xml
2.xmlpullparser介绍
通过xml. newpullparser()来获取xmlpullparser;
xmlpullparser常用方法如下:
void setinput(inputstream inputstream, string inputencoding); //设置要解析的文件以及编码 int geteventtype(); //获取当前事件类型,返回的类型有start_document(文档开头)、start_tag (元素开头)、end_tag(元素结束)、text (内容)、 end_document(文档结束) int next(); //获取下个事件类型. 返回的类型和geteventtype()一样. getname(); //获取当前元素名 gettextcharacters(); //获取当前内容(当geteventtype ()==text时通过这个来获取元素内容) nexttext(); //获取下个内容(当geteventtype ()==start_tag时通过这个来获取元素内容)
示例代码如下:
private void parsepersonsxml(){ xmlpullparser pullparser = xml.newpullparser(); try { pullparser.setinput(this.openfileinput("persons.xml"), "utf-8"); string name = null; string age = null; string id = null; int eventtype = pullparser.geteventtype(); while(eventtype!=pullparser.end_document) { switch (eventtype) { case xmlpullparser.start_tag: if("person".equals( pullparser.getname())){ id = pullparser.getattributevalue(null, "id"); //获取编号,并初始化内容 name =null; age = null; }else if("姓名".equals(pullparser.getname())){ name = pullparser.nexttext(); //获取姓名 }else if("age".equals(pullparser.getname())){ age = pullparser.nexttext(); //获取年龄 } break; case xmlpullparser.end_tag: if("person".equals( pullparser.getname())){ system.out.println("person : id="+id+" 姓名="+name+" 年龄="+age); //打印信息 } break; } eventtype = pullparser.next(); } } catch (exception e) { // todo auto-generated catch block e.printstacktrace(); } }
运行打印: