对于 XPATH,如何对不同类型的祖先使用 OR?

问题描述 投票:0回答:1

我试图阻止某些结果出现在我的 Google 搜索中,但我很难使用 uBlock Origin 简洁地创建单行块。

例如,我不想要“www”。 imyfone.com”出现在我的搜索结果中,因为他们试图向我出售产品,而我正在寻找一个我可以自己解决的解决方案。

因此,经过几次尝试,我能够将范围缩小到 2 个条目以删除该网站的出现:

*[contains(@href,'www.imyfone.com')][@jsname]/ancestor::div[@jsaction][@jscontroller]/..

*[contains(@href,'www.imyfone.com')][@jsname]/ancestor::div[@class='hlcw0c']

尽管取得了进展,但我不知道如何将两者结合起来。问题归结于这两个结果的结构。对于一个结果,如果该结果与我正在搜索的内容逐字相关,则结果会更大,并且相对于其他相关结果具有不同的结构。

我尝试使用以下方法,但它只能得到

<a>link</a>
以获得大结果。

*[contains(@href,'www.imyfone.com')][@jsname][ancestor::div[@jsaction][@jscontroller]/.. or ancestor::div[@class='hlcw0c']]

我尝试过这个,但它太贪婪/包容以至于删除了整个页面。

*[contains(@href,'www.imyfone.com')][@jsname]/ancestor::div[((@class='MjjYud') or (@jsaction and @jscontroller))]/..

我尝试用

and not
缩小最后一个范围,但无论我尝试什么,它都被忽略了。

*[contains(@href,'www.imyfone.com')][@jsname]/ancestor::div[((@class='MjjYud') or (@jsaction and @jscontroller) and not(@id='rso' and @id='rcnt'))]

有人可以帮助我更好地使用 XPATH 吗?谢谢!

regex xml dom xpath ublock-origin
1个回答
0
投票

我可能遗漏了一些东西,但是你不能简单地将两个表达式与联合运算符('|')组合起来吗?

您还没有告诉我们您正在使用哪个 XPath 版本,我猜它可能是 1.0。

在 XPath 2.0+ 中,您可以在路径的任何步骤中使用并集运算符,因此

*[contains(@href,'www.imyfone.com')][@jsname]/
   (ancestor::div[@jsaction][@jscontroller]/.. |  
    ancestor::div[@class='hlcw0c'])

在 XPath 1.0 中它只能出现在顶层,这更加冗长:

*[contains(@href,'www.imyfone.com')][@jsname]/
    ancestor::div[@jsaction][@jscontroller]/.. | 
*[contains(@href,'www.imyfone.com')][@jsname]/ancestor::div[@class='hlcw0c']
© www.soinside.com 2019 - 2024. All rights reserved.