2017-08-15 96 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

给你 –