• 11.Android-Xml读写


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

    运行打印:

     

  • 相关阅读:
    jstree 的使用(增 删 改 查)
    关于Random 和 List<int>的Exist的方法使用
    编译器错误消息: CS0016: 未能写入输出文件“c:WindowsMicrosoft.NETFramework64v4.0.30319Temporary ASP.NET Files oot1b124ac2fb984fcApp_global.asax.vbtifrrw.dll”--“拒绝访问。 ”
    SQL Server执行动态SQL正确方式
    C#设计模式——简单说(简单工厂模式)
    c#设计模式——简单说(建造者模式)
    nginx将http请求转发到https
    maven出现:Failed to execute goal on project ...: Could not resolve dependencies for project ...
    动态切换element-ui表格中每行的icon
    axios拦截token过期,返回401的情况
  • 原文地址:https://www.cnblogs.com/lifexy/p/12176831.html
Copyright © 2020-2023  润新知