【问题标题】:How to select <div class="ok">.....<a href="soft://an.id/">...</div> nodes?如何选择 <div class="ok">.....<a href="soft://an.id/">...</div> 节点?
【发布时间】:2022-01-04 04:54:09
【问题描述】:

一个文档有多个&lt;div class="ok"&gt; 标签。我可以选择所有这些 "//*[@class="ok"]"(我不必指定 div,因为只有 div 标签有这个类)。我得到了一个包含 6 个与此匹配的节点的列表。

现在,我需要

  • 要么测试每个节点,以查看它是否包含标签&lt;a href="soft://an.id/"&gt;。这种包含不是直接的。我的意思是,&lt;div&gt; 包括一个&lt;table&gt;,其中包含许多&lt;tr&gt;&lt;td&gt;&lt;span&gt;,以及&lt;a..&gt;(只有一个,或者没有)&lt;/div&gt; 之前的某处。
  • 或者直接选择class="ok"中包含这个&lt;a&gt;标签的(div)节点。

我尝试了很多事情,但都失败了。包括在 href 检测中保护“/”(是否需要?)。 我对正则表达式非常熟悉,但我必须承认我发现 XPath 语法更难理解。而且 W3C 参考文档很难,没有示例。..

欢迎任何提示。

【问题讨论】:

    标签: html xpath


    【解决方案1】:

    要仅选择包含 &lt;a href="soft://an.id/"&gt; 子元素的 &lt;div class="ok"&gt; 元素,您可以使用以下 XPath 定位器:

    "//div[@class='ok' and .//a[@href='soft://an.id/']]"
    

    【讨论】:

    • 这就像一个魅力!谢谢先知。我错过了.//。我尝试了 /*/..etc 的组合,有或没有 contains()。我在想// 表示文档的开头。显然,.// 表示先前选择的元素的开始。我说的对吗?
    • 很高兴能为您提供帮助。我没有时间搜索准确的文档,所以我用我的话来描述。点. 表示来自这个,当前节点。否则,您将从文档/网页的开头进行搜索。一个斜线/ 表示直接子节点或可能引用节点本身。双斜杠// 表示some child
    • 所以我的表达字面意思是:找到带有div标签名称和class的元素,其值为ok在下面/里面有子元素//a[@href='soft://an.id/']
    • 它简短、高效、清晰。谢谢先知!
    • 不客气?
    【解决方案2】:

    如果我理解正确,你在 div 下的某个地方嵌套了一个“ok”类,对吧?

    因此,在 xpath 中,a / 表示当前标记下方/上方的直接定位符。如果您正在寻找找到的 div 下的某处,则需要使用:

    //div[@class="ok"]//a[@href="soft://an.id/"]
    

    然后你需要使用某种断言来检查它是否存在。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-10
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 2013-12-03
    相关资源
    最近更新 更多