我正在尝试使用(和)和(或)两个表达式一起创建一个xpath,但是没有获得成功。
.//p/span[@class='currency-value']
,而其他价格为.//p/span/span[@class='currency-value']
,所以我想使用OR exprssion .//span[not(contains(text(),'Ad'))]
我在xpath下面尝试过但是没有用。
.//p/span[@class='currency-value'] | .//p/span/span[@class='currency-value'] and .//span[not(.='Ad')]
答案 0 :(得分:3)
而不是说"尝试XXX"如果您了解当前尝试的错误,我认为这很有用。
.//p/span[@class='currency-value'] | .//p/span/span[@class='currency-value'] and .//span[not(.='Ad')]
" |" XPath中的运算符意味着" union" - 它形成两个节点集的并集。因此//x | //y
选择由//x
选择的节点和//y
选择的节点的并集。到现在为止还挺好。你可以简化" union"表达的一部分
(.//p/span | .//p/span/span)[@class='currency-value']
如果你愿意的话。
"和"更有问题。 "和"的操作数必须是布尔值,而在你的表达式中,两个操作数都是节点集。我怀疑(虽然我无法确定)您的意图是从联合节点中排除 - 设置那些满足谓词.='Ad'
的节点,但是没有看到您的源数据,它不清楚如何产品和价格相互关联。也许你打算这样做:
(.//p/span | .//p/span/span)[@class='currency-value'][not(.='Ad')]
或者也许这样:
(.//p/span | .//p/span/span)[@class='currency-value'][not(..='Ad')]
无论哪种方式,如果我说你的意图是排除一些原本会被选中的节点,那么另外一个谓词就是这样做的。
答案 1 :(得分:1)
查看页面后,此CSS选择器将起作用
div.hide-lg:not([data-behat-search-results-ads-xl]):not(.prolist-row) p > span.currency-value, div.hide-lg:not([data-behat-search-results-ads-xl]):not(.prolist-row) p > span > span.currency-value
答案 2 :(得分:0)
试试这个。不要过分复杂化 dependencies {
implementation fileTree(dir: 'libs', include: '*.jar')
// SUB-PROJECT DEPENDENCIES START
implementation(project(path: "CordovaLib"))
compile "com.android.support:customtabs:26.+"
compile "com.android.support:support-v4:24.1.1+"
compile "com.google.gms:google-services:+"
compile "com.google.android.gms:play-services-tagmanager:11.+"
compile "com.google.firebase:firebase-core:11.+"
compile "com.google.firebase:firebase-messaging:11.+"
compile "com.google.firebase:firebase-crash:11.+"
compile "com.google.firebase:firebase-config:11.+"
compile "com.google.firebase:firebase-perf:11.+"
compile "com.google.android.gms:play-services-auth:11.+"
compile "com.google.android.gms:play-services-identity:11.+"
// SUB-PROJECT DEPENDENCIES END
}
//p/span
答案 3 :(得分:0)
试试这个。将@Vitaliy的答案与你的答案结合起来:
.//p/span[@class='currency-value'][not(.='Ad')] | .//p/span/span[@class='currency-value'][not(.='Ad')]
答案 4 :(得分:0)
请在xpath中找到AND和OR的使用方法如下:
这是Page html:
<div class="mtlist-tab">
<ul class="wwf-tab-h">
<li class="tab-head">
<li class="tab-head on">
<li class="tab-head">
</ul>
</div>
如果你在xpath中使用AND,其中两个元素具有相同的类类名,那么它将返回2个匹配的元素。
//li[@class='tab-head' and @class='tab-head']
如果您在xpath中使用AND,其中两个元素具有不同的类类名,那么它将返回0个匹配的元素。
//li[@class='tab-head' and @class='tab-head on']
如果你在xpath中使用OR,其中两个元素具有不同的类类名,那么它将返回3个匹配的元素(根据HTML)。
//li[@class='tab-head' OR @class='tab-head on']