关于这些XPath表达式的含义,我说得对吗?

关于这些XPath表达式的含义,我说得对吗?,xpath,Xpath,这是给学校的,如果你知道你的XPath并且不介意告诉我我是否正确: 一,。 /a[/b]/a 在根为“b”的树中,每个具有父级“a”的“a”。([/b]的位置是不相关的?即,上述位置是否等同于//a/a[/b] 二,。 //*[/a]///a[/a][a] 从左到右分解: //*[///a]表示具有子代“a”的所有元素, 因此,//*[//a]//a(特别是学校)表示所有的“a”元素。 而//*[///a]///a[/a]表示树中根为“a”的所有“a”元素, 最后-//*[///a]///a[/

这是给学校的,如果你知道你的XPath并且不介意告诉我我是否正确:

一,。
/a[/b]/a

在根为“b”的树中,每个具有父级“a”的“a”。(
[/b]
的位置是不相关的?即,上述位置是否等同于
//a/a[/b]

二,。
//*[/a]///a[/a][a]

从左到右分解:
//*[///a]
表示具有子代“a”的所有元素, 因此,
//*[//a]//a
(特别是学校)表示所有的“a”元素。 而
//*[///a]///a[/a]
表示树中根为“a”的所有“a”元素, 最后-
//*[///a]///a[/a][a]
表示树中根为“a”且有子元素“a”的所有“a”元素


感谢您的帮助,我似乎在任何地方都找不到一个直接的答案。

什么课程在测试您神秘的XPath查询?哇

  • //a[/b]/a

    是的,你有这个权利。
    [/b]
    的位置是不相关的

  • //*[///a]///a[/a][a]

    从技术上讲,
    //*[///a]///a
    相当于
    //*///a
    ,这意味着所有的“a”元素都有一个祖先元素。因此,如果根元素是“a”,它将不匹配。除此之外,是的,您的分析是正确的


  • 值得一提的是,几年前,我为一个我参与的项目从零开始用JavaScript实现了一个完整的XPath解析器。因此,我真的希望我的答案是正确的!

    最后,一个家庭作业问题实际上表明提问者在这方面做了一些工作。+1。你基本上是正确的。关于#2,
    /*[/a]
    不会选择具有子体
    a
    的所有元素,如果文档中的任何位置包含
    a
    ,它会选择所有元素。要选择具有子体
    a
    的所有元素,您需要使谓词过滤器相对于匹配的元素:
    /*[.//a]
    好的,那么[/a],/a]形式的任何谓词的位置都是不相关的吗?简单的[a]怎么样?位置重要吗?谢谢!(堆栈溢出是一种严重的现象)没错。拥有绝对路径(以斜杠开头的路径)真的没有意义在方括号内。你可以这样做,但在现实世界的XPath表达式中你永远找不到这样的东西。简单的[a]并不影响你把它放在哪里。它选择包含
    a
    子元素的元素,并将其应用在哪里。将方括号视为SQL where子句的等价物。例如
    /*[a]
    读取“选择所有具有名为
    a
    的子元素的元素”和
    //a/a[b]
    阅读“选择所有
    a
    元素的子元素并具有名为
    b
    的子元素的
    a
    ”谢谢(我在上面加了一条注释).这是一门关于搜索引擎的愚蠢课程,他们在太浅的层次上覆盖了太多内容:)