Android中pull解析XML文件

 
 


/**
  * 解析XML文件
  * @param is XML文件输入流
  * @return 诗词的集合
  * @throws XmlPullParserException
  * @throws IOException
  */
 public static List<Poem> readXML(InputStream is) throws XmlPullParserException, IOException{
  List<Poem> poems = null;
  Poem poem = null;
  // 构造一个pull解析器
  
XmlPullParser parser = Xml.newPullParser();
  // 设置解析的资源以及格式
  
parser.setInput(is,"utf-8");
  int type = parser.getEventType();
  while(type != XmlPullParser.END_DOCUMENT){
   switch (type) {
   case XmlPullParser.START_TAG:
    // 当标签名为root时
    if ("root".equals(parser.getName())) {
     poems = new ArrayList<Poem>();
    }else if ("node".equals(parser.getName())) {
     poem = new Poem();
    }else if ("title".equals(parser.getName())) {
     poem.setTitle(parser.nextText());
    }else if ("auth".equals(parser.getName())) {
     poem.setAuth(parser.nextText());
    }else if ("type".equals(parser.getName())) {
     poem.setType(parser.nextText());
    }else if ("content".equals(parser.getName())) {
     poem.setContent(parser.nextText());
    }else if ("desc".equals(parser.getName())) {
     poem.setDesc(parser.nextText());
    }
    break;

   case XmlPullParser.END_TAG:
    if ("node".equals(parser.getName())) {
     poems.add(poem);
     poem = null;
    }
    break;
   }
   // 解析下一个
   type = parser.next();
  }
  System.out.println("poems.size() = " + poems.size());
  return poems;
 }

 

// xml文件如下:

Android中pull解析XML文件_第1张图片

解析XML时,首先构造一个pull解析器,然后设置解析器的资源以及格式。

用一个循环来读取xml文件的每一个节点,用parser.getName()方法获取节点的名称,当节点名为root时,创建一个Poem的集合

   当节点名为node时实例化一个Poem对象,然后跳到下一个节点

   当节点名为title时,用parser.nextText())读取后面的文本,也就是aaaa,后面如下。。。。。。

 

如果<node>节点中有一个属性id,<node id="1">,可以通过parser.getAttributeValue(0)来获取id的值。

 

你可能感兴趣的:(android,xml,pull)