我正在使用nokogiri获得以下节点:
<Instrument id="161" code="648">
<Parameter key="currency" value="USD"/>
<Parameter key="calendar" value="JAN"/>
</Instrument>
这是Nokogiri::XML::NodeSet < Object
。
我想获得值"USD"
我试过了:
node.search 'Parameter[key=currency]'
但我不知道如何检索实际值。
那么,我怎样才能获得“USD”的价值?
感谢。
答案 0 :(得分:5)
由于指向节点很简单,所以你想要的并不完全清楚:
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<xml>
<Instrument id="161" code="648">
<Parameter key="currency" value="USD"/>
<Parameter key="calendar" value="JAN"/>
</Instrument>
</xml>
EOT
doc.at('Parameter')['value'] # => "USD"
doc.search('Parameter').first['value'] # => "USD"
at
找到第一个匹配的节点,因此['value']
会检索该节点的value
内容。
search
找到所有匹配的节点,first
检索检索到的第一个节点,这是at
所做的。
答案 1 :(得分:3)
这是一种方式:
require 'nokogiri'
doc = Nokogiri::XML::Document.parse <<-eot
<Instrument id="161" code="648">
<Parameter key="currency" value="USD"/>
<Parameter key="calendar" value="JAN"/>
</Instrument>
eot
doc.css('#161 Parameter').map{|e| e['value']}
# => ["USD", "JAN"]
# to get only 'USD' the below would work as per your example.
doc.at_css("#161 Parameter[key='currency']")['value']
# => "USD"
doc.css
将为您提供Nokogiri::XML::NodeSet
,doc.at_css
将为您提供Nokogiri::XML::Node
。doc.css('#161 Parameter')
将为您提供所有Parameter
个节点,其中如doc.at_css("#161 Parameter[key='currency']")
,将为您提供第一个Parameter
节点。
我试过:node.search'参数[key = currency]'但我不知道如何检索实际值。
你非常接近。只是做
doc.search("Parameter[key='currency']").first['value']
# => "USD"