Nokogiri在文本包含中失败



我正在尝试从html中提取文本。

doc = Nokogiri::HTML('<B> <A href="http://www.asl.com/foo/bar"> Status :</A></B> REGISTERED <BR>')

puts doc.search('//b').first.text
puts doc.search('//b[contains(text(),"Status")]/following-sibling::text()[1]').first.text

第一个put返回Status :但是第二个put抛出一个异常undefined method 'text' for nil:NilClass

为什么contains不能正常搜索?还是我做错了什么?

我认为您对XPath中的text函数有错误的理解。与DOM函数不同,它不返回所有文本子节点的连接字符串。相反,它选择单独的文本节点。

在您的示例中,//text()将选择三个文本节点:
 [" ", " Status :", " REGISTERED "]

您可能需要这样的XPath表达式:

//b/a[contains(text(),"Status")]/../following-sibling::text()[1]

基本上,它找到具有正确文本节点的a元素,然后走到父元素(b),然后获得其兄弟文本节点。

"Status: "实际上不是<B></B>中的文本节点,而是<A></A>中的文本节点。

doc.search('//b/a[contains(text(),"Status")]/text()[1]').first.text

相关内容

  • 没有找到相关文章

最新更新