【问题标题】:Nokogiri next elementsNokogiri 下一个元素
【发布时间】:2013-09-09 12:25:28
【问题描述】:

我写了这段代码,应该是自我解释:

def parse_kapitel(node)
  if node.node_name.eql? 'nummer'
    tmp_kapitel = Kapitel.new
    puts node.next_element['V']
    puts node.next_element.next_element['V']
    puts node.next_element.next_element.next_element['V']    
  end
end

我的 xml:

<kapitel>
      <nummer V="1"/>
      <von_icd_code V="A00"/>
      <bis_icd_code V="B99"/>
      <bezeichnung V="Bestimmte infektiöse und parasitäre Krankheiten"/>
      <gruppen_liste>
        <gruppe>
          <von_icd_code V="A00"/>
          <bis_icd_code V="A09"/>
          <bezeichnung V="Infektiöse Darmkrankheiten"/>
          <diagnosen_liste>
            <diagnose>

您可以看到我的代码非常繁琐,因为我多次使用next_element

我怎样才能把整个事情写得更短?

【问题讨论】:

  • 您想要每个 ICD 章节/组的诊断列表吗?
  • 您的 XML 示例无效。提问时请使用有效的例子。

标签: ruby nokogiri


【解决方案1】:

这是怎么回事?

require 'nokogiri'

doc = Nokogiri.XML <<-eol
<kapitel>
      <nummer V="1"/>
      <von_icd_code V="A00"/>
      <bis_icd_code V="B99"/>
      <bezeichnung V="Bestimmte infektiöse und parasitäre Krankheiten"/>
      <gruppen_liste>
        <gruppe>
          <von_icd_code V="A00"/>
          <bis_icd_code V="A09"/>
          <bezeichnung V="Infektiöse Darmkrankheiten"/>
</kapitel
            eol

doc.xpath("/kapitel//@V").map(&:text)
# => ["1",
#     "A00",
#     "B99",
#     "Bestimmte infektiöse und parasitäre Krankheiten",
#     "A00",
#     "A09",
#     "Infektiöse Darmkrankheiten"]

如果您想要属性V 的前三个兄弟的值,请执行以下操作:

doc.xpath("/kapitel/*[name(.)='nummer']/following-sibling::*")[0..2].map{|n|n["V"]}
# => ["A00", "B99", "Bestimmte infektiöse und parasitäre Krankheiten"]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 2017-01-20
相关资源
最近更新 更多