【发布时间】:2019-01-27 17:30:24
【问题描述】:
我需要按特定顺序(橙、苹果、樱桃)导入水果节点,而不是按字母或数字:
<fruits>
<fruit>
<name>Apple</name>
<expiration>2018-08-21</expiration>
</fruit>
<fruit>
<name>Banana</name>
<expiration>2018-08-29</expiration>
</fruit>
<fruit>
<name>Cherry</name>
<expiration>2018-08-29</expiration>
</fruit>
<fruit>
<name>Orange</name>
<expiration>2018-08-20</expiration>
</fruit>
</fruits>
在新的排序要求之前,我们这样枚举节点,效果很好:
doc.css('fruit').each do |fruit|
Pantry.create({name:fruit.css('name').first.text,
expiration: fruit.css('expiration').text})
end
我尝试使用基于this answer 的xpath,但它只返回name 子节点,而不是父fruit 节点,导致expiration 子节点不可访问:
fruit_basket = %w[Orange Apple Cherry]
fruit_basket.each do |temp_fruit|
fruit = doc.xpath("//name[contains(text(), '#{temp_fruit}')]")
Pantry.create({name:fruit.css('name').text,
expiration: fruit.css('expiration').text})
end
按照我的fruit_basket 数组的顺序枚举水果节点的正确方法是什么(nokogiri-way?),忽略不在fruit_basket 中的水果节点?
【问题讨论】:
标签: ruby xml ruby-on-rails-4 xpath nokogiri