Получить элемент 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/&quot;DUcFQncyfCp7I2A9WhVUFE4.&quot;">
<id>tag:youtube.com,2008:user:USERNAME:uploads</id>
<updated>2012-05-19T14:16:53.994Z</updated>
  ...
    <entry gd:etag="W/&quot;DE8NSX47eCp7I2A9WhVUFE4.&quot;">
        <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]
Другие вопросы по тегам