php - 使用xpath和php选择所有href属性和选择所有具有href属性的 anchor 元素之间的区别

标签 php xpath href

鉴于在 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 the href 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/

相关文章:

xml - 在XSLT中解析字符串

c# - 获取当前节点的完整路径

html - 更改 <a> 元素的大小以适合父元素 <span>

html - href 链接在本地有效但无法使用?

html - 停止响应 href 链接的 html 输入

php - 如何在 PHP PDO 中使用异步 Mysql 查询

php - 防止在评论投票中进行第二次投票

php - 数组键上的模式匹配

xpath - xpath表达式多次选择同一父节点

php - 在 HTML、MYSQL、PHP 中渲染 HTML