android 之 XMLPull

  Pull解析

  Pull的XML解析操作与SAX解析操作类似,也是采用事件驱动的方式。当XML文档开始解析或者遇到节点时都会有相应的事件代码触发。

  主要涉及两个类:

  org.xmlpull.v1.XmlPullParserFactory

  org.xmlpull.v1.XmlPullParser

  

  使用XMLPull解析xml文件的步骤:

  1.创建工厂类

  XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

  2.创建parser

  XmlPullParser xpp = factory.newPullParser();

  3.设置输入流,即要解析的内容

  xpp.setInput(input, "GBK"); //这里主要由两种形式,字符流(如:StringReader)或者字节流(如:FileInputStream)

  4.通过循环,解析内容  

  int eventType = xpp.getEventType(); //必须要有
  while(eventType != XmlPullParser.END_DOCUMENT) {

    if(eventType == XmlPullParser.START_DOCUMENT) {

      all = new ArrayList<LinkMan>();
    } else if(eventType == XmlPullParser.START_TAG) {

      elementName = xpp.getName();
      if("linkman".equals(elementName)) {

        man = new LinkMan();
      }
    } else if(eventType == XmlPullParser.END_TAG) {

      elementName = xpp.getName();
      if("linkman".equals(elementName)) {

        all.add(man);
        man = null;
      }
    } else if(eventType == XmlPullParser.TEXT) {

      if("name".equals(elementName)) {

        man.setName(xpp.getText());
      } else if("email".equals(elementName)) {

        man.setEmail(xpp.getText());
      }
    }

    eventType = xpp.next(); //一定要有

  }

  Pull生成XML文档

  需要利用org.xmlpull.v1.XmlSerializer  

   使用XmlSerializer生成XML文件的步骤和解析xml文件的步骤类似:

  1.创建工厂类

  XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

  2.创建XmlSerializer

  XmlSerializer xs = factory.newSerializer();

  3.设置输出流,即要写入的目标位置流,可以是字节流,也可以是字符流。

  xs.setOutput(output, "UTF-8");

  4.处理输出内容  

  xs.startDocument("UTF-8", true);
  xs.startTag(null, "addresslist");
  Iterator<LinkMan> iter = this.all.iterator();
  while(iter.hasNext()) {

    LinkMan man = iter.next();
    xs.startTag(null, "linkman");
    xs.startTag(null, "name");
    xs.text(man.getName());
    xs.endTag(null, "name");
    xs.startTag(null, "email");
    xs.text(man.getEmail());
    xs.endTag(null, "email");
    xs.endTag(null, "linkman");
  }

xs.endTag(null, "addresslist");
xs.endDocument();
xs.flush();

原文地址:https://www.cnblogs.com/xingkai/p/5110559.html