如何将Xpath与LibXml 2结合使用

如何将Xpath与LibXml 2结合使用,xpath,xquery,libxml2,Xpath,Xquery,Libxml2,在这篇文章中,我试图划出一个阶段(这是一个大的价格,是一个大胆的红色) 我使用libxml2.2 当我试图通过这个XPATH提取标记时 //*[@class='priceLarge'] 它起作用了 但是为了使查询更容易,我想在Firefox上使用FireBug 使用FireBug,它为我提供了以下XPath /html/body/div[2]/form/table[3]/tbody/tr/td/div/table/tbody/tr[2]/td[2]/span/b 使用此Xpath不起作用,似乎此

在这篇文章中,我试图划出一个阶段(这是一个大的价格,是一个大胆的红色)

我使用libxml2.2

当我试图通过这个XPATH提取标记时

//*[@class='priceLarge']

它起作用了

但是为了使查询更容易,我想在Firefox上使用FireBug

使用FireBug,它为我提供了以下XPath

/html/body/div[2]/form/table[3]/tbody/tr/td/div/table/tbody/tr[2]/td[2]/span/b


使用此Xpath不起作用,似乎此Xpath没有给出完整的查询。如何修改此XPath以刮取项目?

Firefox和其他浏览器以HTML格式生成
tbody
标记

事实上,
tbody
可能不在那里,因此可以在XPath中删除它。(
/html/body/div[2]/form/table[3]/tr/td/div/table/tr[2]/td[2]/span/b
)您可以通过从应用程序中保存html并在文本编辑器中查看来测试这一点

但是,由于其目的似乎是从网页中提取信息,因此如果您使用不太依赖于树结构的XPath(即
//b[@class='pricelagle']
),则应用程序可能会更抵制网页中的更改

EDIT:似乎除了
tbody
问题之外,Firefox还将
div
(ID:divsinglecolumnminwidth)元素渲染为包含
表单
元素(ID:handleBuy)

使用XML编辑器查看html时,会发现
form
元素是
div
元素的同级元素,因此表达式应该以
/html/body/form/table[3]
开头


测试XPath表达式的一个工具是。

我在没有tbody的情况下尝试了它,但仍然不起作用!有什么想法吗?-----/html/body/div[2]/form/table[3]/tbody/tr/td/div/table/tbody/tr[2]/td[2]/span[1]/b--我在一个评估器中尝试了这个方法,它给了我正确的值。我刚刚将最后一个旋转更改为旋转[1]。但当我将它与libxml2一起使用时,它仍然不起作用!我不知道为什么!如果您没有将HTML复制到程序中,请不要将其从Firefox视图源复制到evaluator中。如果要在程序中下载,请将URL输入evaluator(如果可能)或保存程序下载的HTML并复制。我们需要由应用程序下载HTML,而不是由浏览器处理。除此之外,慢慢地在LibXml2中构建XPath,直到没有找到一个值,这将缩小差异。