为什么放在/ res / xml中的XML会生成XmlPullParserException(在/ res / raw时没有错误)?

时间:2013-07-08 17:02:10

标签: android xml-parsing android-pullparser

我将本地XML文件放入res/raw,然后将其加载到InputStreamer对象中。它工作正常,我能够解析其内容。

当我将相同的XML放入res/xml时,我会XmlPullParserException说它无法找到START标记。

我使用此代码填充InputStream对象:

 InputStream is = getResources().openRawResource(R.raw.data);

此行从/res/xml加载XML:

InputStream is = context.getResources().openRawResource(R.xml.data); 

为什么会这样?如果第二种方法是错误的,那么res/xml的目的是什么?

2 个答案:

答案 0 :(得分:0)

getXML()未返回InputStream,因此我不确定您的代码是如何编译的。它返回XMLResourceParser

http://developer.android.com/reference/android/content/res/Resources.html#getXml(int)

  

返回一个XmlResourceParser,通过它可以读取给定资源ID的通用XML资源。

/res/xml的目的是存储XML并稍后解析它的一个方便的地方!有时您不需要InputStream:)

答案 1 :(得分:0)

你可以这样读:

void parseXml(int xmlId){
    Resources res = context.getResources();
    //Xml parserer
    XmlResourceParser parser = res.getXml(xmlResource);

    while (parser.next() != XmlPullParser.END_DOCUMENT) {

         //A start tag is reached
         if(parser.getEventType() == XmlPullParser.START_TAG){

             //Which tag is
             if(parser.getName().equalsIgnoreCase("Name"){
                 //Do something when a <Name> tag is reached
                 //and so on ...
             }
         }

    }
}