2016-02-07 76 views
0

XmlPullParser不解析自闭标记,只需跳过它即使“isEmptyElementTag”也没有帮助。如何解决这个问题呢? 我想解析自闭标签公司。解析空标记

XML结构

<phone> 
    <id>1</id> 
    <company/> // it should parse 
    <model>Galaxy</model> 
    <price>18000</price> 
</phone> 

代码:

try { 
     XmlPullParser xpp = prepareXpp(); 
     while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) { 

      switch (xpp.getEventType()) { 

       case XmlPullParser.START_TAG: 

        if (xpp.isEmptyElementTag()) { 
         tagName = "company"; } 

         break; 

       case XmlPullParser.TEXT: 

        if (tagName.equals("company")) { 
         Log.d(LOG_TAG, "Empty tag" ); 
        } 

        break; 
       default: 
        break; 
      } 

      xpp.next(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (XmlPullParserException e) { 
     e.printStackTrace(); 
    } 
    XmlPullParser prepareXpp() { 
    return getResources().getXml(R.xml.data); 

回答

0

正如你可以在文档看到:

空元素(如<标签/>)将具有两个报告单独的 事件:START_TAG,END_TAG

因此它不会输入case XmlPullParser.TEXT:标记。

如果你添加一些记录到START_TAG你应该看到日志控制台:

case XmlPullParser.START_TAG: 
    if (xpp.isEmptyElementTag()) { 
     Log.d(LOG_TAG, "Empty tag"); 
    } 
    break; 

编辑:你可以尝试做下一个解决方法XML文件移动到原始文件夹,下面的代码添加到:

XmlPullParser prepareXpp() { 
    InputStream istream = getResources().openRawResource(R.raw.data); 
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
    XmlPullParser xpp = factory.newPullParser(); 
    xpp.setInput(istream, "UTF-8"); 
    return xpp; 
} 
+0

因此不工作:( – Samur

+0

@Samur嗯你能为prepareXml()添加代码; –

+0

我在代码方法添加prepareXpp – Samur