html 从Xpath组中排除元素

bvn4nwqk  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(176)

我有一个非常复杂的网站HTML,我想通过相对XPath选择多组元素。例如:
//div[@class="something] | //span/div | //div/span/div[@class="otherthing"]
选择了所有元素后,我想排除同一xpath中的某些特定元素。
假设上面的xpath返回了150个元素,我想排除下面3个xpath,它们都指向1个元素,所以最终结果应该是找到了147个元素:
//div[@id="menu"]
//div/span/div[@class="something3"]
//body/span/div/span/div[1]
如何在1个xpath中使用xpath 1完成此操作?
我已经尝试了这里的解决方案,但这只适用于当你选择一个组,你想从排除:https://stackoverflow.com/a/74615054/12366148
我也尝试了多种方法来组合'not'和'self'命令,但是似乎没有任何效果。不幸的是,我不能使用except操作符,因为它只在Xpath 2.0中有效。

ibps3vxo

ibps3vxo1#

给定<xsl:variable name="ns1" select='//div[@class="something] | //span/div | //div/span/div[@class="otherthing"]'/><xsl:variable name="ns2" select='//div[@id="menu"] | //div/span/div[@class="something3"] | //body/span/div/span/div[1]'/>,可以使用例如:

<xsl:variable name="ns1-except-ns2" select="$ns1[count(. | $ns2) != count($ns2)]"/>

我的XPath1记忆是否还能用。
您没有使用XSLT标记,所以我猜您需要

(//div[@class="something] | //span/div | //div/span/div[@class="otherthing"])[count(. | //div[@id="menu"] | //div/span/div[@class="something3"] | //body/span/div/span/div[1]) != count(//div[@id="menu"] | //div/span/div[@class="something3"] | //body/span/div/span/div[1])]

相关问题