无法解析android中的xml属性

时间:2014-02-19 07:12:15

标签: android xmlpullparser

我有一个像下面这样的xml,我尝试用android下面的XmlPullParser用下面的代码解析它,每件事都是正确的唯一问题是我无法解析url标签属性,它返回null,有什么问题?

XML:

<doc>
 <urls>
  <url isIR="false" bitrate="320" extension="MP3" size="9.9MB">
  http://example.mp3
  </url>
 </urls>
 <caption>
  <![CDATA[ don t bother ]]>
 </caption>
 <artist>
  <![CDATA[ shakira ]]>
 <artist>
 <album>
  <![CDATA[ star mark greatest hits (cd) ]]>
 <album>
</doc>

代码:

while (eventType != XmlPullParser.END_DOCUMENT) {
            String tagname = parser.getName();
            switch (eventType) {
            case XmlPullParser.START_TAG:
                if (tagname.equalsIgnoreCase("doc")) {
                    ava = new Ava2();
                }
                break;

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

            case XmlPullParser.END_TAG:
                if (tagname.equalsIgnoreCase("doc")) {
                    avaList.add(ava);
                } else if (tagname.equalsIgnoreCase("url")) {
                    ava.setUrl(text);
                    ava.setBitrate(parser.getAttributeValue(null, "bitrate"));
                    ava.setSize(parser.getAttributeValue(null, "size"));
                } else if (tagname.equalsIgnoreCase("caption")) {
                    ava.setCaption(text);
                } else if (tagname.equalsIgnoreCase("artist")) {
                    ava.setArtist(text);
                } else if (tagname.equalsIgnoreCase("album")) {
                    ava.setAlbum(text);
                }

                break;

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

3 个答案:

答案 0 :(得分:0)

试试这个..

           else if (tagname.equalsIgnoreCase("url")) {
                ava.setUrl(text);
                for(int i =0 i < parser.getAttributeCount(); i++){
                   if(parser.getAttributeName(i).equals("bitrate")){
                       ava.setBitrate(parser.getAttributeValue(i));
                   }else if(parser.getAttributeName(i).equals("size")){
                       ava.setSize(parser.getAttributeValue(i));
                   }
                }
            }

修改

        case XmlPullParser.START_TAG:
            if (tagname.equalsIgnoreCase("doc")) {
                ava = new Ava2();
            }
            if (tagname.equalsIgnoreCase("doc")) {
                avaList.add(ava);
            } else if (tagname.equalsIgnoreCase("url")) {
                ava.setUrl(text);
                ava.setBitrate(parser.getAttributeValue(null, "bitrate"));
                ava.setSize(parser.getAttributeValue(null, "size"));
            } else if (tagname.equalsIgnoreCase("caption")) {
                ava.setCaption(text);
            } else if (tagname.equalsIgnoreCase("artist")) {
                ava.setArtist(text);
            } else if (tagname.equalsIgnoreCase("album")) {
                ava.setAlbum(text);
            }
            break;

答案 1 :(得分:0)

您需要首先解析“urls”标记,然后解析“url”标记。

答案 2 :(得分:0)

您需要使用parser.getAttributeName()和parser.getAttributeValue()函数。

当案例为START_TAG时,您可以使用parser.getAttributeCount()获取标签计数,然后使用从0开始计数-1的for循环,并将循环整数传递给getAttributeName和getAttributeValue函数。

int count=parser.getAttributeCount();
if(count!= -1) {


    for(int i=0;i<count;i++) {

        String name = parser.getAttributeName(i);
        String value = parser.getAttributeValue(i);
    }
}