用XPath提取内容?

时间:2010-10-16 04:14:04

标签: c# xml dom xpath html-agility-pack

我有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

非常感谢任何帮助您做到这一点。

2 个答案:

答案 0 :(得分:1)

以下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'    

答案 1 :(得分:1)

使用以下XPath表达式

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

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

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

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

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