ruby - 简单兄弟的 XPATH 是什么?

标签 ruby xpath nokogiri siblings

示例:

<p>
 <span class="label">Name:</span>  PeterPan<br>
 <span class="label">Tag:</span>   Critical<br>
 <span class="label">Priority:</span>  223<br>
</p>

我正在使用下面的代码,我得到:

Name:|
Tag:| 
Priority: 

doc.xpath("//p/span").each do |para_tag|
   puts para_tag.text
end

但我需要以下详细信息:

Name: PeterPan | Tag: Critical | Priority: 223

最佳答案

使用函数式编程创建从标签到值的映射:

labels = Hash[
  doc.css('span.label').map do |s|
    [
      s.text[0..-2],   # get rid of the trailing colon
      s.at_xpath('following-sibling::text()').content.strip
    ]
  end
]
p labels
#=> {"Name"=>"PeterPan", "Tag"=>"Critical", "Priority"=>"223"}

或者更简单地说,我们可以向他们展示:

doc.css('span.label').each{ |s| puts "#{s.text} -- #{s.next_sibling}" }
#=> Name: --   PeterPan
#=> Tag: --    Critical
#=> Priority: --   223

使用 next_sibling找到以下文本并利用 Nokogiri::XML::Text#to_s 这一事实给出文本内容。

关于ruby - 简单兄弟的 XPATH 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8964732/

相关文章:

.net - Xpath可在Notepad++中工作,但不能在.NET应用程序中工作

ruby - Nokogiri 通过 XML 解析失败

css - 如何提取不属于子节点的文本?

ruby 正则表达式匹配特定字符以外的任何字符

ruby-on-rails - InstanceDouble( session )(匿名)> 收到意外消息 :[]= with

ruby-on-rails - Rails 和 ActiveRecord:将方法附加到从 ActiveRecord::Base 继承的模型

Selenium - 设置切换

python - python中的Xpath无法获取数据

ruby-on-rails - 如何一次运行多个 nokogiri 屏幕抓取线程

ruby-on-rails - 用于门户的 Ruby 技术