使用XMLPullParser解析所有XML文本

时间:2017-08-15 06:03:35

标签: android xml xml-parsing android-xmlpullparser

我有一个与[this one here][1]类似的问题 我已经阅读了有关XMLPullParser的教程,似乎没有得到这个。

我想要使用XMLPullParser解析XML标记

<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();
            }

            }

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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();
}