用XPath提取内容?

c# dom html-agility-pack xml xpath

我有html内容,我将其存储为XML文档(使用HTML Agility Pack)。我知道一些XPath,但我无法归零所需的确切内容。

在下面的示例中,我试图从大图像中提取“src”和“alt”文本。这是我的例子:

<html>
<body>
   ....
   <div id="large_image_display">
      <img class="photo" src="images/KC0763_l.jpg" alt="Circles t-shirt - Navy" />
   </div>
   ....
   <div id="small_image_display">
      <img class="photo" src="images/KC0763_s.jpg" alt="Circles t-shirt - Navy" />
   </div>
</body>
</html>

什么是获得“images / KC0763_l.jpg”和“Circles T-shirt - Navy”的XPath?这是我走了多远,但这是错的。目前主要是伪代码:

\\div[@class='large_image_display']\img[1][@class='photo']@src
\\div[@class='large_image_display']\img[1][@class='photo']@alt

任何有助于实现这一目标的帮助将不胜感激。

一般承认的答案

以下xpath将引导您访问img标记的src属性:

'//html/body/div/img[@class="photo"]/@src'

同样,这将使您获得alt属性:

'//html/body/div/img[@class="photo"]/@alt'

从那里你可以到达属性文本。如果你只想找到与'large_image_display'相匹配的那个,你会进一步过滤它,如下所示:

'//html/body/div[@id="large_image_display"]/img[@class="photo"]/@src'    

热门答案

使用以下XPath表达式

/html/body/div[@id='large_image_display']/img/@src

/html/body/div[@id='large_image_display']/img/@alt

始终尽量避免使用 // 缩写 ,因为它可能导致非常低效的评估(导致整个(子)树被扫描)。

在这种特殊情况下,我们知道html元素是文档的顶部元素,我们可以通过/html选择它 - 而不是//html

您的主要问题是在表达式中您使用\\\并且XPath中没有此类运算符。您尝试使用的正确XPath运算符是///缩写。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因