本人第一次分享资源,写得不好,大家不要见怪。这是这个文件里面的一段解释注释,我贴上来吧:
/* @Title:XML文件中属性的解析修改
* @Introduction:使用PULL方法进行XML解析
* XML文件存放在SDcard根目录下;android1.6版本之前是在/sdcard/,之后是在/mnt/sdcard/
* 当前测试用来运行的版本是android。4.2.2
* 最小支持的版本是android.2.2.0
* 文件名字分别为:local_serial_num.xml存放本机序列号
* serial_number_src.xml存放取号序列池的最大值和最小值
* 完成功能有:启动后自动读取本机序列号,从本地XML文件中,并显示该序列号
* 如果本机没有序列号,就从序列号池获取一个号,设置到本机,并显示新序列号。
* 可以设置序列号池的起始值和终止值并保存进取号序列池文件中
* 如果这两个文件中缺少任何一个,都将在本地上述指定目录自动生成
* @Attention: 空字符串初始化String = null;
* 和字符串初始化String = ""
* 区别在于:一个是没有初始化的对象是空的,还不能调用String类的封装函数因而只能用String == null来进行判断
* 一个是已经初始化的对象能调用类似isEmpty()的操作进行判断,不过是一个长度length为0的字符串
* @Date:2014-08-08
* @Author:Wanney
* @Version:1.0
* @Introduction:使用PULL方法进行XML解析
* XML文件存放在SDcard根目录下;android1.6版本之前是在/sdcard/,之后是在/mnt/sdcard/
* 当前测试用来运行的版本是android。4.2.2
* 最小支持的版本是android.2.2.0
* 文件名字分别为:local_serial_num.xml存放本机序列号
* serial_number_src.xml存放取号序列池的最大值和最小值
* 完成功能有:启动后自动读取本机序列号,从本地XML文件中,并显示该序列号
* 如果本机没有序列号,就从序列号池获取一个号,设置到本机,并显示新序列号。
* 可以设置序列号池的起始值和终止值并保存进取号序列池文件中
* 如果这两个文件中缺少任何一个,都将在本地上述指定目录自动生成
* @Attention: 空字符串初始化String = null;
* 和字符串初始化String = ""
* 区别在于:一个是没有初始化的对象是空的,还不能调用String类的封装函数因而只能用String == null来进行判断
* 一个是已经初始化的对象能调用类似isEmpty()的操作进行判断,不过是一个长度length为0的字符串
* @Date:2014-08-08
* @Author:Wanney
* @Version:1.0
*/
关键的代码我把它封装在里面了,也没什么说的,注释得很清楚。但是照着看就好了。
// 标准的PULL解析XML文件的一般步骤:
// 打开文件变成InputStream,然后再setInput,到XmlPullParser类。
// 【打开不同路径的文件形式不一样但是都能变成InputStream,
// 除了一种情况:在res/xml目录(该目录默认是没有的需要自己在工程中新建文件夹)下:
// XmlResourceParser xmlParser = this.getResources().getXml(R.xml.XXX);
// 调用该函数可以直接到 XmlPullParser类。
// 缺点:目前我还没想到这种保存在包内的文件怎么去修改和重写,所以我放弃了,
// 感觉不会适用,这个软件是用来寻找本机序列号,如果在包内,那么跟本机的关系就不会太大了!】
// 这时用switch形式判断事件类型再分情况进行操作
public void parseXMLImportantPart(String[] Value,String Path,String FileName,boolean flag,XmlSerializer serializer){
int i;
XmlPullParser XMLParser = Xml.newPullParser();
attributeValue = new String[attributeNameLength];
InputStream is = null;
try {
is = new FileInputStream(Path + FileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
XMLParser.setInput(is, "utf-8");
} catch (XmlPullParserException e) {
e.printStackTrace();
}
try {
int eventType = XMLParser.getEventType();
if(flag)serializer.setOutput(stringWriter);
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
if(flag)serializer.startDocument("utf-8", true); //开始按情况记录当前XML文件的节点信息;
break;
case XmlPullParser.START_TAG:
String tagName = XMLParser.getName();
if(flag)serializer.startTag("",tagName);
if(tagName.equals(this.tagName));
for(i = 0;i < attributeNameLength;i ++){
if(flag){
serializer.attribute("",attributeName[i],Value[i]);
}else{
attributeValue[i] = XMLParser.getAttributeValue("", attributeName[i]);
}
}
break;
case XmlPullParser.END_TAG:
tagName = XMLParser.getName();
if(flag) serializer.startTag("",tagName);
// 单节点完成,可往集合里边添加新的数据
break;
case XmlPullParser.END_DOCUMENT:
if(flag) serializer.endDocument();
break;
}
eventType = XMLParser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException ee) {
ee.printStackTrace();}
catch (Exception e) {
throw new RuntimeException(e);
}
}