我试图使用XPath来查找在给定命名空间中具有元素的所有元素。
例如,在下面的文档中,我想找到foo:bar和doodah元素
<?xml version="1.0" encoding="UTF-8"?> <root xmlns:foo="http://foo.example.com"> <foo:bar quux="value">Content</foo:bar> <widget>Content</widget> <doodah foo:quux="value">Content</doodah> </root>
我知道我可以使用以下XPath表达式来加载给定命名空间中的所有属性
"//@*[namespace-uri()='http://foo.example.com']"
然而:
>这不给我的元素,只是属性和
>其中元素包含来自该命名空间的多个属性,此XPath将返回每个属性的结果而不是每个元素
是否可以得到我想要的,或者我只需要收集属性并计算它们对应的唯一元素集合?
编辑:Dimitre Novatchev给了我以下答案。我没有意识到你可以在这样的谓词中嵌套谓词:
"//*[@*[namespace-uri()='http://foo.example.com']]"
具体来说,这表示“任何具有namespace-uri =’…’的属性的元素”
使用:
原文链接:https://www.f2er.com/xml/293336.html//*[namespace-uri()='yourNamespaceURI-here' or @*[namespace-uri()='yourNamespaceURI-here'] ]
谓词两个条件与XPath或运算符结合使用。
因此,XPath表达式选择任一元素:
>属于指定的命名空间
要么
>具有属于指定命名空间的属性