2013-11-04 118 views
2

,我发现了以下节点与引入nokogiri套叠的键:查找引入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]'但我不知道如何获取实际值。

那么,我怎样才能得到价值“美元”?

谢谢。

回答

4

这不是完全清楚你既然指向节点想要的东西很简单:

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

这里有一个办法:

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::Nodedoc.css('#161 Parameter')会给你所有的Parameter节点,其中如doc.at_css("#161 Parameter[key='currency']"),会给你第一个节点Parameter

我试过了:node.search'参数[key = currency]'但我不知道如何检索实际值。

你离得很近。只要做到

doc.search("Parameter[key='currency']").first['value'] 
# => "USD"