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

时间:2015-12-15 09:24:34

标签: ruby nokogiri

如何使用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>

2 个答案:

答案 0 :(得分:1)

我这样做:

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,其行为类似于数组。

答案 1 :(得分:0)

<强>解决

我得到了它,只是通过索引获得。

NSNotFound