加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – XPath过滤属性与命名空间

发布时间:2020-12-13 16:28:13 所属栏目:PHP教程 来源:网络整理
导读:我需要创建XPath表达式,以根据给定的命名空间中的属性进行过滤.示例 XML是: feed xmlns='http://www.w3.org/2005/Atom' xmlns:media='http://search.yahoo.com/mrss/' xmlns:yt='http://gdata.youtube.com/schemas/2007' ... entry media:group media:thumb
我需要创建XPath表达式,以根据给定的命名空间中的属性进行过滤.示例 XML是:
<feed xmlns='http://www.w3.org/2005/Atom' xmlns:media='http://search.yahoo.com/mrss/'
  xmlns:yt='http://gdata.youtube.com/schemas/2007'> ...
 <entry>
  <media:group>
   <media:thumbnail url='http://i.ytimg.com/1.jpg' yt:name='default'/>
   <media:thumbnail url='http://i.ytimg.com/2.jpg' yt:name='hqdefault'/>
   <media:thumbnail url='http://i.ytimg.com/3.jpg' yt:name='start'/>
   <media:thumbnail url='http://i.ytimg.com/4.jpg' yt:name='middle'/>
  </media:group>
 </entry>

并且我需要获取属性yt:name设置为“hqdefault”的节点的URL.

我尝试使用XPath表达式

'./media:group/media:thumbnail[@yt:name='hqdefault']/@url'

但是似乎使用yt:name指定namespaced属性不起作用.进行查询时,我会收到一个空的DOMNodeList.

我正在php访问XML,所以我注册了yt命名空间:

registerNamespace( 'yt','http://gdata.youtube.com/schemas/2007' );

提前Thnx

XPath看起来正确.

可能是您的库不支持命名空间属性,或者您尚未正确注册yt命名空间和/或媒体命名空间.

尝试只匹配在谓词过滤器内的local-name()和namespace-uri(),而不是使用namespace-prefix:

./*[local-name()='group'
      and namespace-uri()='http://search.yahoo.com/mrss/'
    ]/*[local-name()='thumbnail'
         and namespace-uri()='http://search.yahoo.com/mrss/'
         and @*[local-name()='name'
                 and namespace-uri()='http://gdata.youtube.com/schemas/2007'
                 and .='hqdefault'
                ]
        ]/@url

如果这样做,那么注册这些命名空间前缀的命名空间是一个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读