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 如果这样做,那么注册这些命名空间前缀的命名空间是一个问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |