更新了XmlParser类

还是发下GitHub地址吧,说不准有人感兴趣呢。

https://github.com/mlxy

代码:

  1 package com.mlxy.xml;

  2 

  3 import java.io.InputStream;

  4 import java.util.HashMap;

  5 import java.util.Map;

  6 

  7 import org.xmlpull.v1.XmlPullParser;

  8 

  9 import android.content.Context;

 10 import android.util.Xml;

 11 

 12 public class XmlParser {

 13     private Context parent;

 14     private XmlPullParser parser;

 15     private Map<String, String> map;

 16     private String result;

 17     

 18     

 19     public XmlParser(Context parent) {

 20         this.parent = parent;

 21         this.parser = Xml.newPullParser();

 22     }

 23     

 24     /** 

 25      * 根据对应的标签检索标签内的内容。

 26      * 

 27      * @param tag 节点名称

 28      * @return 返回标签内容,如果没有找到对应标签就返回空白字符。*/

 29     public String getContentByTag(String tag) throws Exception {

 30         // 初始化输入流,指定编码。

 31         InputStream in = parent.openFileInput(XmlFile.getFile().getName());

 32         parser.setInput(in, "UTF-8");

 33         result = "";

 34         

 35         // 第一次获取事件。

 36         int eventType = parser.getEventType();

 37 

 38         // 当指针没有到文档结束位置的时候。

 39         while (eventType != XmlPullParser.END_DOCUMENT) {

 40             // 如果发现了对应的标签就返回其中内容,然后跳出。

 41             if (eventType == XmlPullParser.START_TAG && tag.equalsIgnoreCase(parser.getName())) {

 42                 result = parser.nextText();

 43                 break;

 44             }

 45             

 46             // 否则就继续循环。

 47             eventType = parser.next();

 48         }

 49 

 50         //释放资源。

 51         in.close();

 52         return result;

 53     }

 54     

 55     /**

 56      * 根据给定的标签列表将对应的内容依次填入Map中并返回。

 57      * 

 58      * @param list 标签列表

 59      * @return map 标签与内容一一对应的映射。

 60      */

 61     public Map<String, String> getContentsByTags(String... tags) throws Exception {

 62         // 初始化输入流,指定编码。

 63         InputStream in = parent.openFileInput(XmlFile.getFile().getName());

 64         parser.setInput(in, "UTF-8");

 65         map = new HashMap<String, String>();

 66         

 67         String tagName = null;

 68         int nulls = 0;

 69         

 70         // 第一次获取事件。

 71         int eventType = parser.getEventType();

 72         

 73         // 当指针没有到文档结束位置的时候。

 74         while (eventType != XmlPullParser.END_DOCUMENT) {

 75             

 76             // 如果发现了标签开始处。

 77             if (eventType == XmlPullParser.START_TAG) {

 78                 // 记下当前标签的名称。

 79                 tagName = parser.getName();

 80                 

 81                 // 开始遍历数组。

 82                 for (int i = 0; i < tags.length; i++) {

 83                     // 如果当前位置是null,就进行下一项for循环。

 84                     if (tags[i] == null) {

 85                         nulls++;

 86                         continue;

 87                     }

 88                     

 89                     // 找到对应的标签就取出内容,添加进映射里。然后把数组的当前位置改为null并继续寻找下一个标签。

 90                     if (tags[i].equalsIgnoreCase(tagName)) {

 91                         map.put(tags[i], parser.nextText());

 92                         tags[i] = null;

 93                         break;

 94                     }

 95                     

 96                 }

 97                 

 98             }

 99             

100             // 如果数组已经处理完毕就停止处理文档。

101             if (nulls == tags.length) {

102                 break;

103             } else {

104                 nulls = 0;

105             }

106             

107             // 否则就继续循环。

108             eventType = parser.next();

109         }

110 

111         // 处理完毕,释放资源。

112         in.close();

113         

114         return map;

115     }

116 }
可变参数

 

你可能感兴趣的:(parser)