鉴于在 html 文档中,所有 anchor 元素都设置了一个 href 属性:
以下 xpath 查询有什么区别
情况1:
//@href
案例2:
//a/@href
案例3:
*/a/@href
在我的情况下:
//@href
返回包含在 href 属性中的所有数据。//a/@href
什么都不返回,但我希望它返回与 //@href
相同的值*/a/@href
什么都不返回,但我希望它返回与 //@href
相同的值和 //a/@href
我担心我严重误解了这些查询是如何工作的。有没有人可以让我直截了当。预先感谢您的帮助。
最佳答案
What is the difference between the following xpath queries
Case 1:
//@href
这将选择所有
href
XML 文档中的属性节点。Case 2:
//a/@href
这将选择所有
href
属于任何名为 a
的元素的属性那是没有命名空间的。Case 3:
*/a/@href
这将选择所有
href
属于任何名为 a
的元素的属性它没有命名空间,并且是当前(上下文)节点的孙子节点。很可能你想写 :
//*/a/@href
这将选择所有
href
属于任何名为 a
的元素的属性不在命名空间中并且其父元素是一个元素。In my situation:
//@href
returns all the data contained in thehref
attribute.
//a/@href
returns nothing but I expect it to return the same as//@href
*/a/@href
returns nothing but I expect it to return the same as//@href
and//a/@href
I fear that I am grossly misunderstanding how these queries work. Is there anybody that can set me straight. Thank you in advance for your assistance.
一种非常常见的情况是 XML 文档具有默认 namespace 。这很可能是导致您出现问题的原因 .在这种情况下,没有
a
文档中存在“无命名空间”中的元素以及具有 a
的任何 XPath 表达式作为位置步骤不选择任何内容。除此之外,这三个表达式并不等价 .
//@href
和 //a/@href
如果文档中除了
a
之外还有其他元素,可以选择不同的节点集有 href
属性,或者文档是否在默认命名空间中。在最后一种情况下,第二个表达式不选择任何内容。//a/@href
和 //*/a/@href
如果文档的顶部元素是
a
,则可以选择不同的节点集有一个 href
属性。 href
此顶部元素的属性由第一个 XPath 表达式选择但未被第二个选择,因为顶部元素的父元素不是元素(它是根节点 /
)。
关于php - 使用xpath和php选择所有href属性和选择所有具有href属性的 anchor 元素之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5772451/