锚元素的 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)]
如何使用 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)]