更新了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 }