怎么解析xml文件根节点的属性

如何解析xml文件根节点的属性

<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;