正在应用Xpath的html有点长,因此粘贴到需要触发Xpath的页面的链接。
我希望得到"购买新的"物品的价格,仅当物品是"由亚马逊实现"。
我在C#上使用Html Agility Pack。
这是我的尝试。我首先尝试查看该项目是否由亚马逊完成。
//div[@id='buyNewInner']//descendant::a[contains(@href,'isAmazonFulfilled=1')]
但我不知道如何从这里继续前往前面的节点并获得该物品的价格,在这种情况下为99.99美元
意图不仅有一个Xpath来获得这个价格,而且还确保我尽可能避免各个节点相对于彼此的位置,并尝试匹配wrt可见文本而不是像{{1一样的Html节点定位}}。 (这里Xpath表示与第一个跨度匹配 - 如果可能的话,我试图避免)
所以在这种情况下,我想要实现的匹配逻辑是:
在"购买新"后面找到价格。如果这发生在" FulFillment By Amazon"
之前答案 0 :(得分:2)
这是一个可能的XPath(格式化为可读性),基于您尝试检查该项是否由亚马逊履行而构建。
//div[
@id='buyNewInner'
and
.//descendant::a[contains(@href,'isAmazonFulfilled=1')]
]
/preceding-sibling::div[@id='buyNewSection']
//span[contains(@class,'offer-price')]
XPath的第一部分返回<div id="buyNewInner">
元素仅如果该项目是&#34;由亚马逊实现&#34; :
//div[
@id='buyNewInner'
and
.//descendant::a[contains(@href,'isAmazonFulfilled=1')]
]
下一位返回<div id="buyNewSection">
,假设它位于同一级别的buyNewInner
div之前,因此我们使用preceding-sibling
:
/preceding-sibling::div[@id='buyNewSection']
然后最后一部分直接转到包含商品价格的<span>
:
//span[contains(@class,'offer-price')]
答案 1 :(得分:0)
您需要使用 .. 返回节点的父亲。使用您提供的示例页面,添加 ../../../../ div [@id =&#39; buyNewSection&#39;] 将您带到兄弟 div 你需要的。 XPath:
//div[@id='buyNewInner']//descendant::a[contains(@href,'isAmazonFulfilled=1')]/../../../../div[@id='buyNewSection']//span[contains(@class,'offer-price')]
将显示
$ 99.99