其他分享
首页 > 其他分享> > XML序列化器(XmlSerializer)及 XML解析器(XmlPullParser)

XML序列化器(XmlSerializer)及 XML解析器(XmlPullParser)

作者:互联网

XML序列化器(XmlSerializer)

XmlSerializer是一个接口

1、通过XML类,获取序列化器

XmlSerializer xs = Xml.newSerializer();

2、给序列化器设置一个输出

/*
setOutput(OutputStream os, String encoding)
os 输出流
encoding 编码集
*/
fos = new FileOutputStream(file);
 xs.setOutput(fos, "UTF-8");

3、文档设置

//开始写xml头
/*
startDocument(String encoding, Boolean standalone)
encoding 编码集
standalone 是否独立
*/
xs.startDocument("utf-8", true);
//标签address
/*
startTag(String namespace, String name)
namespace 名称空间  一种约束
name 标签名

//下面是没有名称空间的情况
*/
 xs.startTag(null, "smss");
 //设置标签内容
xs.text(sms.getAddress());
//标签结束,有开始必须有结束,参数说明同startTag
xs.endTag(null, "smss");
//文档结束
xs.endDocument();

XML解析(XmlPullParser)

1、获取XmlPullParser的参数

XmlPullParser parser = Xml.newPullParser();

2、设置输入

/*
setInputStream(InputStream is, String encoding)
is 输入流
encoding 编码集
*/
  parser.setInput(in,"utf-8");

3、获取内容

//获取事件类型parser.getEventType()
int type = parser.getEventType();
//判断是否结束 type!=XmlPullParser.END_DOCUMENT
while(type!=XmlPullParser.END_DOCUMENT) {
    switch (type) {
    case XmlPullParser.START_TAG:
         //parser.getName()获取标签名
         if("weather".equals(parser.getName())) {
                //创建集合对象
               weatherList = new ArrayList<Channel>();
               //parser.getAttributeValue(0)获取属性值
           }else if("channel".equals(parser.getName())) {
                channel = new Channel();
                //获取id值
                String id = parser.getAttributeValue(0);
                channel.setId(id);
            }else if ("city".equals(parser.getName())) {
                 //获取city属性
                 //parser.nextText()获取当前标签文本
                String city = parser.nextText();
                channel.setCity(city);
              }else if ("temp".equals(parser.getName())) {
                //获取<u>temp</u>属性
                String temp = parser.nextText();
                 channel.setTemp(temp);
              }else if ("pm250".equals(parser.getName())) {
                 String pm250 = parser.nextText();
                 channel.setPm250(pm250);
              }else if ("wind".equals(parser.getName())) {
                  String wind = parser.nextText();
                  channel.setWind(wind);
              }
              break;
        //判断是不是标签结尾,如果是,进行封装
        case XmlPullParser.END_TAG:
              if("channel".equals(parser.getName())) {
                   weatherList.add(channel);
               }
           }
          //获取下一个解析类型
         type = parser.next();
     }

标签:XML,解析器,String,getName,parser,equals,XmlPullParser,序列化,channel
来源: https://www.cnblogs.com/lyhcc/p/10737761.html