2016-02-07 129 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