欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

11.Android-Xml读写

程序员文章站 2022-04-23 09:05:13
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:

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

运行打印:

 11.Android-Xml读写