【问题标题】:What is the XPath expression for <span>s not inside <div>s?<span>s 不在 <div>s 内的 XPath 表达式是什么?
【发布时间】:2021-08-06 02:35:30
【问题描述】:

我试图只在div 标签之外找到&lt;span&gt; 标签。示例 HTML:

<span>find me</span>
<span>find me</span>
<div>
    <span>don't find me</span>
</div>

我尝试过的是以下内容,但我得到了所有&lt;span&gt;

//*[not(self::div)]/span

【问题讨论】:

  • 您的表达式//*[not(self::div)]/span 应该有效,至少对于您的特定示例而言。我怀疑还有其他事情发生。

标签: html xpath


【解决方案1】:

这应该可行:

//span[not(ancestor::div)]

从字面上看,这将匹配标签名称为 span 且没有标签名称为 div 的祖先的所有节点。
感谢this post

【讨论】:

  • 您的选项似乎更通用,但我很难想象 HTML-doc 的 span 节点至少没有一个 div 祖先
  • 我同意你的观点,但据我了解,这就是这个问题的意义所在。如果作者要求表达以查找没有直接父 div 的跨度 - 我也会添加它,这很简单。
  • 这是真的。这是一个简化的示例,与我在现实世界中尝试做的完全不同。我只是想知道它是一个 HTML 标记,我试图在另一个 HTML 标记中排除它的存在。实际上,它是一些时髦的非标准 HTML,但我只需要 XPath 表达式并且不想弄脏水。
【解决方案2】:

尝试以下一项以获得所需的输出

//span[not(parent::div)]

【讨论】:

  • 感谢您的回答。我实际上需要ancestor 而不是parent,但我的例子不够清楚。
猜你喜欢
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2019-04-21
  • 2016-11-20
  • 1970-01-01
  • 2016-05-16
相关资源
最近更新 更多