我有一个像下面这样的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();
}
答案 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);
}
}