样本:
<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
提供文本内容的事实
如果当前节点是:
<span class="label">Name:</span>
那么这个XPath表达式:
following-sibling::node()[1]
选择所需的文本节点:
" PeterPan"