3

我正在使用 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" ?

谢谢。

4

2 回答 2

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做的。

于 2013-11-04T17:37:58.220 回答
2

这是一种方法:

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节点,其中 asdoc.at_css("#161 Parameter[key='currency']")将为您提供第一个Parameter节点。

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

你很亲密。做就是了

doc.search("Parameter[key='currency']").first['value']
# => "USD"
于 2013-11-04T17:37:43.843 回答