我想从列表中提取一组数字。列表项由其中的标题标识,并以随机顺序显示。我想将(在第一个列表项中)数字(1,287,498
)分配给同一<li>
代码(Russia
)中包含的标题。
<ul>
<li>
<h6>Russia</h6>
<p>Red</p>
<p>1,287,498</p>
</li>
<li>
<h6>USA</h6>
<p>Blue</p>
<p>782,2378,223</p>
</li>
...etc.
</ul>
我想要这样的事情:
russia = 1,287,498
我尝试使用XPath,但它没有用,大概是因为订单是随机的;它不断分配错误的变量。
答案 0 :(得分:2)
lis = doc.xpath('//li') # Or however you are getting the right elements
data = Hash[ lis.map{ |li| [li.at('h6').text, li.search('p').last.text] }]
#=> {
#=> "Russia" => "1,287,498",
#=> "USA" => "782,2378,223",
#=> }
p data["Russia"]
#=> "1,287,498"
此答案假定带有数字的<p>
是<li>
中的最后一段。由于您没有共享完整的文档,因此很难知道这是否正确。
答案 1 :(得分:0)
您应该使用CSS同级选择器~
或+
:
doc.at('h6[text()=Russia] ~ p:last').text
#=> "1,287,498"
doc.at('h6[text()=Russia] + p + p').text
#=> "1,287,498"