2017-08-15 98 views
0

我有一個類似於[this one here][1]的問題 我已經閱讀了關於XMLPullParser的教程,似乎並沒有得到這個教程。使用XMLPullParser解析所有XML文本

我有一個XML標籤我想用XMLPullParser解析

<dt> 
: <sx>outcome</sx> 
<sx>result</sx> 
</dt> 

我想要得到的結果「:結果的結果。」 因爲我正在從在線基地閱讀這個XML。它可能會改變。例如:

<dt> 
:degree or measure of 
<d_link>succeeding</d_link> 
</dt> 

的問題是我如何分析並獲得在標籤中的所有文本「DT」不論是標籤的名字嗎?

這是我所嘗試過的,但它不工作。

while (parser.next() != END_TAG){ 
      if (parser.getEventType() != TEXT) 
      { 
       continue; 
      } 
      else if (parser.getEventType() == TEXT) 
      { 
       Log.d("Text", parser.getText()+" in the likelihood"); 
       stringBuilder.append(parser.getText()); 
       parser.next(); 
      } 

      } 

回答

1

你應該做類似的東西:

while (eventType != XmlPullParser.END_DOCUMENT) 
{ 
    String tagname = parser.getName(); 
    switch (eventType) 
    { 
     case XmlPullParser.START_TAG: 
      if (tagname.equalsIgnoreCase("dt")) 
      { 
       // create a new instance of DTClass 
       dt= new DTClass(); 
      } 
      break; 

     case XmlPullParser.TEXT: 
      text = parser.getText(); 
      break; 

     case XmlPullParser.END_TAG: 
      if (tagname.equalsIgnoreCase("dt")) { 
        // add DTClass object to list 
        dts.add(dt); 
      } 
      else if (tagname.equalsIgnoreCase("sx")) 
      { 
        dt.setSX(text); 
      } 

      break; 

     default: 
      break; 
    } 
    eventType = parser.next(); 
} 
+0

非常感謝你Artur。問題是我無法控制子標籤可能是什麼。對於某個特定的查詢,它可能是「sx」,可能是其他事情。我如何處理這種情況? –

+0

現在有效。非常感謝! –

+0

謝謝阿圖爾。我有另一個類似於上面的問題。我該如何接觸你? –

0

如果我們假設XML格式是否正確,您可以更改代碼要記住打開的標籤,值,當標籤結束了的值添加到字典/列表如下:

while (eventType != XmlPullParser.END_DOCUMENT) 
{ 
    String tagname = parser.getName(); 
    String detectedTag = "" ; 
    String valueTag = "" ; 
    switch (eventType) 
    { 
     case XmlPullParser.START_TAG: 
      if (tagname.equalsIgnoreCase("dt")) 
      { 
       // create a new instance of DTClass 
       // move this line to the end tag 
       //dt= new DTClass(); 
      } 
      detectedTag = tagname ; 
      break; 

     case XmlPullParser.TEXT: 
      valueTag = parser.getText();     
      break; 

     case XmlPullParser.END_TAG: 
      if (tagname.equalsIgnoreCase(detectedTag)) {      
        // create a new instance of DTClass      
        dt= new DTClass(); 

        // set value 
        dt.setValue(valueTag); 

        // add DTClass object to list od dictionary 
        dts.add(dt); 
      } 
      else 
      { 
        // clear tag and value tag 
        detectedTag = "" ; 
        valueTag = ""; 
      } 

      break; 

     default: 
      break; 
    } 
    eventType = parser.next(); 
} 
+0

非常感謝!它現在有效。即使你給出的第一個答案完美無缺。謝謝。 –

+0

給你 –