1

我是 Ruby 和 Xpath 的新手。我需要从表中提取系统功能

http://h10010.www1.hp.com/wwpc/ie/en/ho/WF06b/321957-321957-3329742-89318-89318-5186820-5231694.html?dnr=1

到目前为止,我已经尝试定位所有的 td 标签,该页面不使用 CSS id,所以我不能以这种方式定位。

我尝试了以下代码

doc.xpath('//tr/th/span[normalize-space(text())="System features"]/..')

但它什么也不返回;(

有谁知道解决这个问题的最佳方法?

4

1 回答 1

0

该表达式在给定的源上应该可以正常工作,但它并不是真正的惯用语。您可能想使用更像这样的东西:

//tr/th[span[normalize-space()='System features']
  1. normalize-space需要一个字符串参数。通过采用文档顺序中的第一个文本节点来传递text()强制转换为字符串的节点集。这在您的文档中并不重要,因为只有一个子文本节点,但您应该知道这是正在发生的事情。
  2. 您不需要/..在表达式末尾使用回溯树。您可以使用嵌套谓词测试孩子的存在,span从而直接选择所需的th

如果您想利用目标th仅包含一个子span节点这一事实,您可以编写以下简化表达式:

//tr/th[normalize-space(span)='System features']

那么,为什么不工作?很难说,但这可能是因为您用来解析文档的工具创建的结构与它在文字源中的显示方式不同(例如,因为输入不是格式正确的 XML)。尝试稍微不同的表达方式:

//*[span[@class='themebody' and normalize-space()='System features']]

或者,也许您应该首先验证您是否可以检索span自身,然后从中构建表达式:

//span[@class='themebody' and normalize-space()='System features']
于 2012-07-14T01:19:21.837 回答