gpt4 book ai didi

ruby - Nokogiri 各节点做,Ruby

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:06 25 4
gpt4 key购买 nike

我有这个 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>
<icd_code V="A00.-"/>
<bezeichnung V="Cholera"/>
<abrechenbar V="n"/>
<krankheit_in_mitteleuropa_sehr_selten V="j"/>
<schlüsselnummer_mit_inhalt_belegt V="j"/>
<infektionsschutzgesetz_meldepflicht V="j"/>
<infektionsschutzgesetz_abrechnungsbesonderheit V="j"/>

你怎么看我的第一个节点是 kapitel 。我想做一些像 kapitel 这样的事情。每个人都做 |f|以便 nokgiri 以正确的顺序提取节点 von_icd_code 和 bis_icd_code。我的代码:

    require 'rubygems'
require 'nokogiri'
require 'open-uri'

@doc = Nokogiri::XML(File.open("icd.xml"))

kapitel = @doc.css('kapitel')
kapitel.each do |f|
puts f.css('von_icd_code')
puts f.css('bis_icd_code')
end

问题是 nogiri 没有提取正确顺序中的“von_icd_code”和“bis_icd_code”,而是首先列出所有 von_icd_code,然后列出所有“bis_icd_code”。如何以正确的顺序提取节点?

在我的输出中我得到:

<von_icd_code V="A00"/>

在这种情况下如何才能只获取V的内容 A00

谢谢!

最佳答案

您可以使用 Nokogiri 的 traverse 方法,它以递归方式遍历所有 XML 节点。

您的示例将类似于此:

names = %w(von_icd_code bis_icd_code)
@doc.traverse {|node| p node['V'] if names.include? node.name}

打印出来

"A00"
"B99"
"A00"
"A09"

Nokogiri::Node 中有很多巧妙的东西,让我们可以用最复杂的 XML 文件做一些非常酷的事情。有关它们的简短列表,您可以查看 at this cheat sheet .

祝你好运!

关于ruby - Nokogiri 各节点做,Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18160086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com