Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xpath“;前面的“;检查以查找值_C#_Xpath_Html Agility Pack - Fatal编程技术网

C# Xpath“;前面的“;检查以查找值

C# Xpath“;前面的“;检查以查找值,c#,xpath,html-agility-pack,C#,Xpath,Html Agility Pack,应用Xpath的html有点长,因此粘贴到需要触发Xpath的页面的链接 我只想在商品“由亚马逊完成”的情况下获得商品的“购买新商品”价格 我正在C#上使用Html敏捷包 这是我的尝试。我首先尝试看看亚马逊是否完成了这个项目。 //div[@id='buyNewInner']//后代::a[包含(@href,'IsamazonImplemented=1')] 但是我不知道如何从这里继续到前面的节点并获得物品的价格,在本例中是99.99美元 这样做的目的不仅是为了获得这个价格,而且还确保我尽可能

应用Xpath的html有点长,因此粘贴到需要触发Xpath的页面的链接

我只想在商品“由亚马逊完成”的情况下获得商品的“购买新商品”价格

我正在C#上使用Html敏捷包

这是我的尝试。我首先尝试看看亚马逊是否完成了这个项目。
//div[@id='buyNewInner']//后代::a[包含(@href,'IsamazonImplemented=1')]

但是我不知道如何从这里继续到前面的节点并获得物品的价格,在本例中是99.99美元

这样做的目的不仅是为了获得这个价格,而且还确保我尽可能避免对各个节点相对位置的假设,并尝试匹配w.r.t可见文本,而不是像
div//span[1]
这样的Html节点位置。(这里Xpath表示与第一个跨度匹配——如果可能的话,我会尽量避免)

因此,在这种情况下,我试图实现的匹配逻辑是:


在单词“Buy New”之后查找价格,前提是该价格出现在单词“FulFillment By Amazon”之前。您需要使用返回节点的父节点。使用您给出的示例页面,添加。/../../../../div[@id='buyNewSection']将您带到所需的同级div。XPath:

//div[@id='buyNewInner']//descendant::a[contains(@href,'isAmazonFulfilled=1')]/../../../../div[@id='buyNewSection']//span[contains(@class,'offer-price')]
将显示


$99.99

这是一种可能的XPath(格式化为可读性),它是基于您检查Amazon是否满足该项的尝试而构建的

//div[
        @id='buyNewInner' 
            and 
        .//descendant::a[contains(@href,'isAmazonFulfilled=1')]
     ]
/preceding-sibling::div[@id='buyNewSection']
//span[contains(@class,'offer-price')]
XPath的第一部分仅在项目“由Amazon完成”时返回
元素

下一位返回的
假定位于同一级别的
buyNewInner
div之前,因此我们使用
前面的同级

/preceding-sibling::div[@id='buyNewSection']
然后,最后一部分直接进入包含项目价格的

//span[contains(@class,'offer-price')]

谢谢你的回复。我实际上是在试图避免固定数量的硬编码。如果在任何其他类型的页面中有一个父级未命中,这将不起作用。这就是为什么我要检查前面的
而不是固定数量的
/../
。关于这一点有什么想法吗?
//span[contains(@class,'offer-price')]