Получить элемент XML через XPath, когда атрибуты не имеют значения
Я ищу способ получить элемент XML (идентификатор записи) из канала YouTube (например, http://gdata.youtube.com/feeds/api/users/USERNAME/uploads).
Канал выглядит так:
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gd="http://schemas.google.com/g/2005" xmlns:yt="http://gdata.youtube.com/schemas/2007" gd:etag="W/"DUcFQncyfCp7I2A9WhVUFE4."">
<id>tag:youtube.com,2008:user:USERNAME:uploads</id>
<updated>2012-05-19T14:16:53.994Z</updated>
...
<entry gd:etag="W/"DE8NSX47eCp7I2A9WhVUFE4."">
<id>tag:youtube.com,2008:video:MfPpj7f6Jj0</id>
<published>2012-05-18T13:30:38.000Z</published>
...
Я хочу получить первый тег в записи (tag:youtube.com, 2008 ...).
После нескольких часов поиска в Google и просмотра вики GDataXML я ничего не понимаю, потому что ни XPath, ни GData не могли предоставить нужный элемент. Мое первое предположение заключается в том, что они не могут игнорировать атрибуты в тегах feed и entry.
Было бы неплохо использовать XPath, но в Objective-C это приветствуется.
1 ответ
Возможно, у вас возникла проблема при попытке запустить XPath из-за пространства имен по умолчанию.
Если вы просто хотите первый тег в entry
, вы можете использовать это:
/*/*[name()='entry']/*[1]
Если вы хотите первый id
в частности, вы можете использовать это:
/*/*[name()='entry']/*[name()='id'][1]
Также, если вы можете использовать XPath 2.0, вы можете полностью пропустить предикат и использовать * для префикса пространства имен:
/*/*:entry/*:id[1]