xml解析生成与解析

xml文件的生成(文件生成的时候一定要注意,有开头就有结尾)
public void onClick(View view) {
    //1创建xml的序列化器
    XmlSerializer xmlSerializer = Xml.newSerializer();
    /**
     * 参数一:编码utf-8
     * 参数二:当前的xml是否是独立的,填true即可(文档是否独立)
     */
    try {
        //2创建输出流,把序列化对象向指定的文件中写
        FileOutputStream outputStream =
                MainActivity.this.openFileOutput("aa.xml", MODE_PRIVATE);
        //序列化器指定输出位置
        /**
         * 参数一:输出流
         * 参数二:编码方式
         */
        xmlSerializer.setOutput(outputStream, "utf-9");
        //3写xml的第一行
        xmlSerializer.startDocument("utf-8", true);
        /**
         * 参数一:命名空间的名字
         * 参数二:标签的名字
         */
        xmlSerializer.startTag(null, "smses");
        for (int i = 0; i < 6; i++) {
            xmlSerializer.startTag(null, "sms");
            //短语内容
            xmlSerializer.startTag(null, "dody");
            xmlSerializer.text("内容");//写文本
            xmlSerializer.endTag(null, "body");

            //地址
            xmlSerializer.startTag(null, "address");
            xmlSerializer.text("上海");
            xmlSerializer.endTag(null, "address");

            //时间
            xmlSerializer.text("1993-12-01");
            xmlSerializer.startTag(null, "time");
            xmlSerializer.endTag(null, "time");

            xmlSerializer.endTag(null, "sms");
        }

        //结束标签
        xmlSerializer.endTag("null", "smses");
        //头标签的结束标签
        xmlSerializer.endDocument();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

二:xml 的解析
xml的解析方式主要有三种(面试题)
1dom 解析:将xml生成一个 树结构,再进行解析
2sax解析:一行一行的解析
3pull 解析:一行一行的解析,适合Android

手动解析xml
//1获取xmlpull 的解析器
XmlPullParser xmlPullParser = Xml.newPullParser();
//2获取要解析的对象
/**
 * 参数一:要解析文件的流
 * 参数二:编码格式
 */
try {
    xmlPullParser.setInput(MainActivity.this.openFileInput("aa.xml"), "utf-8");
    int type;
    while ((type = xmlPullParser.next()) != XmlPullParser.END_DOCUMENT) {//如果向下移动不是xml的document的根节点继续解析
        if (type == XmlPullParser.START_DOCUMENT) {
            //开始解析头文件(解析头文件的时候一般不做操作)
        } else if (type == XmlPullParser.START_TAG) {//如果是解析到starttag标签
            String name = xmlPullParser.getText();//获取当前标签的名字
            if (name.equals("smses")) {
                //创建集合用来存储xml中的对象
                lst = new ArrayList<>();

            } else if (name.equals("sms")) {
                //创建实体类
                sms = new Smes();

            } else if (name.equals("body")) {//实体类赋值
                sms.setBody(xmlPullParser.nextText());//xmlPullParser.nextText()通过这个方法获取当标签中值

            } else if (name.equals("time")) {
                sms.setTime(xmlPullParser.nextText());

            } else if (name.equals("address")) {
                sms.setAddress(xmlPullParser.nextText());

            }
        } else if (xmlPullParser.next() == XmlPullParser.END_TAG) {
            String name = xmlPullParser.getText();
            if (name.equals("sms")) {
                lst.add(sms);
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值