前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >11.Android-Xml读写

11.Android-Xml读写

作者头像
诺谦
发布2020-02-12 23:39:57
6370
发布2020-02-12 23:39:57
举报
文章被收录于专栏:Linux驱动Linux驱动

android中写XML时,需要用到XmlSerializer类

解析XML时,则需要用到XmlPullParser类

1.XmlSerializer类介绍

通过Xml.newSerializer()来获取XmlSerializer

XmlSerializer常用方法如下所示:

代码语言:javascript
复制
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>

示例代码如下:

代码语言:javascript
复制
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常用方法如下:

代码语言:javascript
复制
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时通过这个来获取元素内容)

示例代码如下:

代码语言:javascript
复制
   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();
        } 
        
 }

运行打印:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档