更新了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 }
可变参数
原文地址:https://www.cnblogs.com/chihane/p/3634885.html