锚元素的 XPath 不在某些父元素中?

XPath for anchor element not in certain parent element?

如何使用 xpath 获取除第二段中斜体字以外的所有锚标记? (问题和示例已被简化。想象一个包含多个 <p><a> 的常规 HTML 页面)。

<html><body>
    <p>
        <a href="a.html">A</a>
        <b><a href="b.html">B</a></b>
        <i><a href="c.html">C</a></i>
    </p>
    <p>
        <b><a href="e.html">E</a></b>
        <a href="f.html">F</a>
        <i><a href="g.html">G</a></i>
    </p>
</body></html>

应该得到:

<a href="e.html">
<a href="f.html">

我有:

root.xpath('//body//p')[1].xpath('a[not(self::i)]')

我只得到:

`<a href="f.html">`

作为 @Andersson commented,不清楚您的 a 元素应该在哪里结束。

假设您的 a 元素是 self-closing,

<html><body>
    <p>
      <a href="a.html"/>
      <b><a href="b.html"/></b>
      <i><a href="c.html"/></i>
    </p>
    <p>
      <b><a href="e.html"/></b>
      <a href="f.html"/>
      <i><a href="g.html"/></i>
    </p>
</body>
</html>

然后这个 XPath,

/html/body/p[2]//a[not(parent::i)]

选择第二段的所有 a 后代,其父元素不是 i 元素:

<a href="e.html"/>
<a href="f.html"/>

致谢:感谢@Andersson 的更正。请点赞。谢谢。

尝试以下 XPath 以获得所需的输出:

//p[2]//a[not(parent::i)]