*/ 在 XPath 中是啥意思?

Posted

技术标签:

【中文标题】*/ 在 XPath 中是啥意思?【英文标题】:What does */ mean in XPath?*/ 在 XPath 中是什么意思? 【发布时间】:2021-12-10 15:36:51 【问题描述】:

为什么我的 XPath,

//android.view.ViewGroup[*/android.widget.TextView[@androidXtext='Microwaves']]

选择这个节点,

<android.view.ViewGroup androidXclickable="true" androidXcontentDescription="ucl.flex-row" androidXenabled="true" androidXfocusable="true" androidXid="@ucl.flex-row" androidXlayout_ androidXlayout_ androidXlayout_x="11px" androidXlayout_y="913px">` 

上面或下面没有其他的?

完整片段:

<android.view.ViewGroup androidXenabled="true" androidXlayout_ androidXlayout_ androidXlayout_x="11px" androidXlayout_y="913px">
  <android.view.ViewGroup androidXclickable="true" androidXcontentDescription="ucl.flex-row" androidXenabled="true" androidXfocusable="true" androidXid="@ucl.flex-row" androidXlayout_ androidXlayout_ androidXlayout_x="11px" androidXlayout_y="913px">
    <android.view.ViewGroup androidXenabled="true" androidXlayout_ androidXlayout_ androidXlayout_x="11px" androidXlayout_y="913px">
      <android.view.ViewGroup androidXcontentDescription="ucl.flex-row.left-action.svg" androidXenabled="true" androidXid="@ucl.flex-row.left-action.svg" androidXlayout_ androidXlayout_ androidXlayout_x="53px" androidXlayout_y="955px">
        <android.view.ViewGroup androidXenabled="true" androidXlayout_ androidXlayout_ androidXlayout_x="53px" androidXlayout_y="955px">
          <android.view.ViewGroup androidXenabled="true" androidXlayout_ androidXlayout_ androidXlayout_x="53px" androidXlayout_y="955px">
            <android.view.ViewGroup androidXenabled="true" androidXlayout_ androidXlayout_ androidXlayout_x="53px" androidXlayout_y="955px"/>
          </android.view.ViewGroup>
        </android.view.ViewGroup>
      </android.view.ViewGroup>
      <android.widget.TextView androidXcontentDescription="ucl.flex-row.main.text" androidXenabled="true" androidXid="@ucl.flex-row.main.text" androidXlayout_ androidXlayout_ androidXlayout_x="137px" androidXlayout_y="960px" androidXtext="Microwaves"/>
    </android.view.ViewGroup>
  </android.view.ViewGroup>
</android.view.ViewGroup>

【问题讨论】:

【参考方案1】:

XPath 默认的axis 是child,所以你的谓词

[*/android.widget.TextView[@androidXtext='Microwaves']]

等价于

[child::*/child::android.widget.TextView[@androidXtext='Microwaves']]

此谓词将选择具有android.widget.TextView 孙子和指定属性的节点。

【讨论】:

【参考方案2】:

这里有两个概念,节点测试和轴:

    * 等价于element(),选择元素而不考虑名称。

    默认轴是child::,因此您的谓词实际上以child::element() 开头。

因此,

//android.view.ViewGroup[*/android.widget.TextView[@androidXtext='Microwaves']]

表示选择所有android.view.ViewGroup 元素,其孙android.widget.TextView 元素的androidXtext 属性值等于'Microwaves'

当您具体询问时,

而不是任何其他高于或低于

除了您的示例 XML 没有满足上述条件的其他元素之外,请注意,如果您将 */ 解释为选择所有后代的通配符,则它不会。如上所述,它只跳过过去的子元素。要选择和测试谓词中的所有后代android.widget.TextView 元素,而不是*/android.widget.TextView,请使用descendent::android.widget.TextViewdescendent-or-self::android.widget.TextView(缩写形式:.//android.widget.TextView)。

另见

What is the difference between .// and //* in XPath? What is meaning of .// in XPath? Difference between "//" and "/" in XPath?

【讨论】:

以上是关于*/ 在 XPath 中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

“||”是啥意思在 var 语句中是啥意思? [复制]

“内容”是啥意思:在招摇/openapi“响应”中是啥意思:

这个xpath是啥意思“//Form/*[.='on']”

& 是啥意思。 (& 点)在 Ruby 中是啥意思?

问号和点运算符是啥意思?在 C# 6.0 中是啥意思?

"CONST func(arg);" 是啥意思在C语言中是啥意思?