我一直在閱讀上XmlPullParser
一些教程在Android中如何解析XML數據。 更具體,我使用的XML從https://gdata.youtube.com/feeds/api/standardfeeds/top_rated
如何用一些標籤中的冒號解析XML?
在這裏,我在此輸入的條目簡化部分(我希望在不改變結構):
<entry>
<id>http://gdata.youtube.com/feeds/api/videos/abc45678qwe</id>
[...]
<title type='text'>THE TITLE</title>
[...]
<link rel='alternate' type='text/html' href='https://www.youtube.com/watch?v=abc45678qwe&feature=youtube_gdata'/>
[...]
<media:group>
[...]
<media:title type='plain'>THE TITLE</media:title>
<yt:duration seconds='300'/>
[...]
<yt:videoid>abc45678qwe</yt:videoid>
</media:group>
<gd:rating average='1' max='5' min='1' numRaters='1' rel='http://schemas.google.com/g/2005#overall'/>
<yt:statistics favoriteCount='0' viewCount='11111111'/>
<yt:rating numDislikes='111' numLikes='111'/>
</entry>
我順利地拿到冠軍並與鏈接:
private String[] readEntry(XmlPullParser parser)
throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, null, "entry");
String title = null;
String link = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
String rel = parser.getAttributeValue(null, "rel");
if (name.equalsIgnoreCase("title")) {
title = readTitle(parser);
} else if (name.equalsIgnoreCase("link")
&& rel.equals("alternate")) {
link = readLink(parser);
} else {
skip(parser);
}
}
return new String[] { title, link };
}
private String readLink(XmlPullParser parser)
throws XmlPullParserException, IOException {
String link = "";
parser.require(XmlPullParser.START_TAG, null, "link");
link = parser.getAttributeValue(null, "href");
parser.nextTag();
parser.require(XmlPullParser.END_TAG, null, "link");
return link;
}
private String readTitle(XmlPullParser parser)
throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, null, "title");
String title = readText(parser);
parser.require(XmlPullParser.END_TAG, null, "title");
return title;
}
但無論我怎麼努力,我無法從<yt:duration seconds='300'/>
獲得持續時間以秒計。
顯然不能用類似上述方法訪問的東西,如處理namespaces
應該是必需的,但我不知道。由於我有點失落,任何建議都非常感謝。謝謝。
====
編輯:我添加了我所要輸入標籤yt:duration
。
我skip(parser);
之前添加其他檢查。即:
} else if (name.equalsIgnoreCase("yt:")) {
Utils.logger("i", "entering yt:", TAG);
readDuration(parser)
}
和我一起"yt"
,或"yt:duration
沒有結果改變"yt:"
。
private String readDuration(XmlPullParser parser)
throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, "yt", "duration");
String seconds = parser.getAttributeValue(null, "seconds");
parser.nextTag();
parser.require(XmlPullParser.END_TAG, "yt", "duration");
Utils.logger("i", "duration: " + seconds + " seconds", TAG);
return seconds;
}
加成作出了「關於要求:
與
String namespace = parser.getNamespace();
,改變name.equalsIgnoreCase...
與namespace.equalsIgnoreCase...
我不明白的日誌條目,所以我甚至不有辦法試試這個 還」。我不確定它是否有用。
你是否可以在yt:duration標籤上更新你的帖子?如果xmlpullparser確實會在命名空間前綴標記 – PopoFibo
上做一些不好的事情,會很有趣。給我2分鐘。 – dentex
'contains'呢?這不是直接與'equalsIgnoreCase'比較'嘗試'name.contains(「duration」)'? – PopoFibo