如何使用Ruby中的Nokogiri gem获得特定数量的XML数据



如何使用Nokogiri获取XML中的前两个<quake>数据?

数据按日期排列在DESCENDING ORDER(eq_date)中。

我已经获得了第一个<quake>数据,但我计划使用前两(2)个最新进行显示。

<quakes>
    <quake>
      <eq_date>1449528341</eq_date>
      <epicenter_code>191</epicenter_code>
      <magnitude>39</magnitude>
    </quake>
    <quake>
      <eq_date>1449505356</eq_date>
      <epicenter_code>471</epicenter_code>
      <magnitude>44</magnitude>
    </quake>
    <quake>
      <eq_date>1449371999</eq_date>
      <epicenter_code>797</epicenter_code>
      <magnitude>42</magnitude>
    </quake>
    <quake>
      <eq_date>1449293419</eq_date>
      <epicenter_code>287</epicenter_code>
      <magnitude>38</magnitude>
    </quake>
    and more.........
</quakes>

我会这样做:

require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<quakes>
  <quake>
    <eq_date>1449505356</eq_date>
    <epicenter_code>471</epicenter_code>
    <magnitude>44</magnitude>       
  </quake>
  <quake>
    <eq_date>1449505356</eq_date>
    <epicenter_code>471</epicenter_code>
    <magnitude>44</magnitude>       
  </quake>
  <quake>
    <eq_date>1449505356</eq_date>
    <epicenter_code>471</epicenter_code>
    <magnitude>44</magnitude>       
  </quake>
  <quake>
    <eq_date>1449505356</eq_date>
    <epicenter_code>471</epicenter_code>
    <magnitude>44</magnitude>       
  </quake>
  and more.........
</quakes>
EOT

一旦文档被解析,就很容易找到所有出现的内容:

quakes = doc.search('quake')
quakes.size # => 4

然后很容易获取特定的:

quakes[0].to_xml # => "<quake>n    <eq_date>1449505356</eq_date>n    <epicenter_code>471</epicenter_code>n    <magnitude>44</magnitude>       n  </quake>"
quakes[1].to_xml # => "<quake>n    <eq_date>1449505356</eq_date>n    <epicenter_code>471</epicenter_code>n    <magnitude>44</magnitude>       n  </quake>"

或者,您可以迭代quakes,它是一个NodeSet,其行为类似于Array。

已解决

我明白了,就凭索引。

@xmlData = Nokogiri::XML(open('/index.xml'))
@xmlData.css('quake')[0]
@xmlData.css('quake')[1]

最新更新