从表中提取数据

时间:2012-07-13 23:38:33

标签: ruby-on-rails xpath

我是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"]/..')

但它什么都不返回;(

有没有人知道最好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

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