当前位置: 移动技术网 > IT编程>移动开发>Android > 11.Android-Xml读写

11.Android-Xml读写

2020年01月11日  | 移动技术网IT编程  | 我要评论

灵媒缉凶第三季,www.avzy.org,龙王你好坏

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

运行打印:

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网