怎么解析xml文件根节点的属性
如何解析xml文件根节点的属性
这是从手机模拟器中的短信息数据库中读取出来的数据,并且已经写入到以上的xml文件中,这里省掉了头部
<smss count="2">为根节点。
就是备份短信的功能。
报的错误是空指针异常,错误行就是System.out.println(parser.getAttributeValue(null, "count"));
如果注释掉该行,程序运行无误,但是需求要做一个进度条对话框来显示还原的进度,所以不需要获取到总数,这里是2
,请教,该如何获取?在线等大牛解惑
------解决思路----------------------
把获取count的代码放倒switch里面
switch (eventType) {
case XmlPullParser.START_TAG:
if ("smss".equals(tagName)) {
System.out.println(parser.getAttributeValue(null, "count"));
} else if ("body".equals(tagName)) {
body = parser.nextText();
} else if ("address".equals(tagName)) {
address = parser.nextText();
} else if ("type".equals(tagName)) {
type = parser.nextText();
} else if ("date".equals(tagName)) {
date = parser.nextText();
}
Log.i(TAG, "读取中");
break;
<smss count="2">
<sms>
<body>rftyikufykufyk</body>
<address>13537460013</address>
<type>1</type>
<date>1425032227329</date>
</sms>
<sms>
<body>rftyikufykufyk</body>
<address>13537460002</address>
<type>1</type>
<date>1425032211869</date>
</sms>
<smss/>
这是从手机模拟器中的短信息数据库中读取出来的数据,并且已经写入到以上的xml文件中,这里省掉了头部
<smss count="2">为根节点。
就是备份短信的功能。
/**
* 该方法用于还原短信
*
* @param context
* 调用者的上下文
*/
public static void restoreSms(Context context) throws Exception {
// 1、读取SD卡上的xml文件
file = new File(Environment.getExternalStorageDirectory(),
"smsbackup.xml");
FileInputStream fis = new FileInputStream(file);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(fis, "utf-8");
// 2、读取Max属性,获取备份的短信的条数
// int max = Integer.parseInt(parser.getAttributeValue(null, "count"));
// int process = 0;
// restoreCallBack.beforeRestore(count);
// Log.i(TAG, count+ "");
// 以上代码无法获取count的值,就试着直接获取并输出
// 但还是出错
System.out.println(parser.getAttributeValue(null, "count"));
// 3、读取每条短信信息,"body", "address", "type", "date"
String body = null;
String address = null;
String type = null;
String date = null;
ContentValues values = null;
// 4、把短信插入到系统的短信应用
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
Log.i(TAG, "准备开始了");
String tagName = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if ("body".equals(tagName)) {
body = parser.nextText();
} else if ("address".equals(tagName)) {
address = parser.nextText();
} else if ("type".equals(tagName)) {
type = parser.nextText();
} else if ("date".equals(tagName)) {
date = parser.nextText();
}
Log.i(TAG, "读取中");
break;
case XmlPullParser.END_TAG:
if ("sms".equals(tagName)) {
values = new ContentValues();
values.put("body", body);
values.put("address", address);
values.put("type", type);
values.put("date", date);
context.getContentResolver().insert(uri, values);
Log.i(TAG, "一条记录产生了");
}
default:
break;
}
// process++;
// restoreCallBack.onSmsRestore(process);
eventType = parser.next();
}
fis.close();
}
报的错误是空指针异常,错误行就是System.out.println(parser.getAttributeValue(null, "count"));
如果注释掉该行,程序运行无误,但是需求要做一个进度条对话框来显示还原的进度,所以不需要获取到总数,这里是2
,请教,该如何获取?在线等大牛解惑
------解决思路----------------------
把获取count的代码放倒switch里面
switch (eventType) {
case XmlPullParser.START_TAG:
if ("smss".equals(tagName)) {
System.out.println(parser.getAttributeValue(null, "count"));
} else if ("body".equals(tagName)) {
body = parser.nextText();
} else if ("address".equals(tagName)) {
address = parser.nextText();
} else if ("type".equals(tagName)) {
type = parser.nextText();
} else if ("date".equals(tagName)) {
date = parser.nextText();
}
Log.i(TAG, "读取中");
break;