Nokogiri:获取不在 <a> 标签内的文本

Nokogiri: Get text which is not inside the <a> tag

看看这个例子:

<li><a href="http://website.com/">This is a website</a>, it belongs to John Sulliva</li>

我可以使用以下方法获取 <li> 标签的内容:

nodeset = doc.css('li')

我还可以使用以下方法获取 <a> 标签内的文本:

nodeset.each do |element|

  ahref = element.css('a') // <-- <a href="http://website.com/">This is a website</a>
  name = ahref.text.strip // <--This is a website
end

但是如何获取 <li> 标签中的其余文本,而不是 <a> 标签中的文本?

从这个例子中,我喜欢得到

", it belongs to John Sullivan"

我该怎么做?

我找到了一种获取其余文本的廉价方法:

  ahref = element.css('a')

  name = ahref.text.strip

  suppl =  element.text.strip.gsub(name, '')

使用 XPath 和 text() 节点测试很简单。如果您已将 li 提取到 nodeset,您可以通过以下方式获取文本:

nodeset.xpath('./text()')

或者您可以直接从整个文档中获取:

doc.xpath('//li/text()')

这使用 text() 节点测试作为 te XPath 表达式的一部分,而不是 text Ruby 方法。它提取 直接 节点 li 后代的任何文本节点,因此不包括 a 元素的内容。