【问题标题】:Why does this Nokogiri XPath have a null return?为什么这个 Nokogiri XPath 返回 null?
【发布时间】:2012-02-27 17:22:03
【问题描述】:

我正在使用 NOKOGIRI 通过网页进行 XPath 处理。我对 XPath 很熟悉,但我无法弄清楚为什么我的 XPath 无法获取特定行。查看 ruby​​ 代码。

我使用 FireBug XML 来验证我的 XPath,所以我 99% 确定我的 XPath 是正确的。

require 'nokogiri'
require 'open-uri'

@searchURL = 'http://www.umn.edu/lookup?UID=smit4562'
@xpath = '//html/body/p/table/tbody/tr/td[2]/table/tbody/tr[2]'

doc = Nokogiri::HTML(open(@searchURL))

puts 'row should be = Email Address: smit4562@umn.edu'
puts '=> ' + doc.xpath(@xpath).to_s

puts 'is row emppty?'
puts '=> ' + doc.xpath(@xpath).empty?().to_s

【问题讨论】:

    标签: ruby xpath nokogiri


    【解决方案1】:

    <tbody> 标记是可选标记,如果省略则为隐式标记。这意味着<tbody> 标签在不存在时由浏览器自动插入。它们不在您示例的源代码中,因此 nokogiri 不知道它们。

    Firebug 使用生成的 DOM,它确实包含 tbody 元素,因此该语句在浏览器中匹配。

    删除两个tbody 选择器,你应该没问题。

    【讨论】:

    • 几乎,但您的方向是正确的。 Nokogiri 似乎也在纠正无效的<p><table> 嵌套。我用//html/body/table/tr/td[2]/table/tr[2]/td/a 找到地址本身。
    猜你喜欢
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多