当属性不相关时,通过XPath获取XML元素

时间:2012-05-19 16:19:25

标签: objective-c xml xpath gdata gdataxml

我正在寻找一种从YouTube Feed(例如http://gdata.youtube.com/feeds/api/users/USERNAME/uploads)接收XML元素(条目ID)的方法。

Feed看起来像这样:

<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>
  ...

我希望在条目中获得第一个标记(标记:youtube.com,2008 ...)。

经过谷歌搜索几个小时并浏览GDataXML wiki后,我无能为力,因为XPath和GData都无法提供正确的元素。 我的第一个猜测是,他们不能忽略feed和entry标签中的属性。

使用XPath的解决方案会很棒,但Objective-C中的解决方案同样受欢迎。

1 个答案:

答案 0 :(得分:1)

由于默认命名空间,您可能在尝试使XPath正常工作时遇到问题。

如果您只想要entry中的第一个标记,可以使用:

/*/*[name()='entry']/*[1]

如果您想要特定的第一个id,可以使用:

/*/*[name()='entry']/*[name()='id'][1]

此外,如果您可以使用XPath 2.0,则可以完全跳过谓词并使用*作为名称空间前缀:

/*/*:entry/*:id[1]