我需要创建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.
registerNamespace( 'yt','http://gdata.youtube.com/schemas/2007' );
提前Thnx
XPath看起来正确.
原文链接:https://www.f2er.com/php/132826.html可能是您的库不支持命名空间属性,或者您尚未正确注册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
如果这样做,那么注册这些命名空间前缀的命名空间是一个问题.