Nokogiri 下一个元素



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

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

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

这是

怎么回事?

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"]

相关内容

  • 没有找到相关文章

最新更新