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

How can I get specific number of data in XML using Nokogiri gem in Ruby

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

数据按降序排列 (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>

已解决

我知道了,按索引获取即可。

@xmlData = Nokogiri::XML(open('/index.xml'))
@xmlData.css('quake')[0]
@xmlData.css('quake')[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,其行为类似于数组。