【问题标题】:Get an XML Element via XPath when attributes are irrelevant当属性不相关时通过 XPath 获取 XML 元素
【发布时间】:2012-05-20 01:56:10
【问题描述】:

我正在寻找一种从 YouTube 供稿(例如 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>
  ...

我想获取条目中的第一个标签 (tag:youtube.com, 2008 ...)。

在谷歌搜索了几个小时并浏览了 GDataXML wiki 之后,我一无所知,因为 XPath 和 GData 都无法提供正确的元素。 我的第一个猜测是,他们不能忽略提要和条目标签中的属性。

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

【问题讨论】:

  • 只有一个entry吗?或者你关心哪个entry?您想要所有entrys 中的ids 吗?你尝试了什么,它是如何失败的?

标签: objective-c xml xpath gdata gdataxml


【解决方案1】:

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

如果你只想要entry中的第一个标签,你可以使用这个:

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

如果你特别想要第一个id,你可以使用这个:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    相关资源
    最近更新 更多