简体   繁体   English

以正确的顺序访问xml的节点

[英]Access nodes of xml in right order

I have problems to extract data from an xml file: 我从xml文件中提取数据时遇到问题:

         <diagnosis_list>
            <diagnosis>
              <icd_code V="A00.-"/>
              <description V="Cholera"/>

              <diagnosis_list>

                <diagnosis>
                  <icd_code V="A00.0"/>
                  <description V="Cholera durch Vibrio cholerae O:1, Biovar cholerae"/>
                  <dangerous V="j"/>
                  <subcategories_list>
                    <subcategory V="Klassische Cholera"/>
                  </subcategories_list>
                </diagnosis>

                <diagnosis>
                  <icd_code V="A00.1"/>
                  <description V="Cholera durch Vibrio cholerae O:1, Biovar eltor"/>
                  <dangerous V="j"/>
                  <subcategories_list>
                    <subcategory V="El-Tor-Cholera"/>
                    <subcategory V="Choleraartige Dysenterie"/>
                    <subcategory V="El-Tor-Enteritis"/>
                  </subcategories_list>
                </diagnosis>

              </diagnosis_list>

            </diagnosis>
          </diagnosis_list>

I tried several things with nokigiri and Css, but had not really success. 我用nokigiri和Css尝试了几件事,但并没有真正成功。 As output i would like something like: 作为输出我想要像:

 A00.- => Cholera

 A00.0 => Cholera durch Vibrio cholerae O:1, Biovar cholerae
 Subcategories => Klassische Cholera

 A00.1 => Cholera durch Vibrio cholerae O:1, Biovar eltor
 Subcategories => El-Tor-Cholera
                  Choleraartige Dysenterie
                  El-Tor-Enteritis

But the output for now is not so important, im happy about every suggestion how to access the nodes of the xml in the right order! 但是现在的输出并不那么重要,我很高兴每个建议如何以正确的顺序访问xml的节点! Thanks 谢谢

Using xpath: 使用xpath:

require 'nokogiri'
doc = Nokogiri::XML(xml)
doc.xpath('//icd_code|//description').each do |node|
  p node['V']
end

prints 版画

"A00.-"
"Cholera"
"A00.0"
"Cholera durch Vibrio cholerae O:1, Biovar cholerae"
"A00.1"
"Cholera durch Vibrio cholerae O:1, Biovar eltor"

UPDATE UPDATE

require 'nokogiri'
doc = Nokogiri::XML(xml)
doc.css('icd_code').each do |icd_code|
  desc = icd_code.css('~ description')[0]
  puts "#{icd_code['V']} => #{desc['V']}"
  icd_code.css('~ subcategories_list>subcategory').each do |subcategory|
    puts "    #{subcategory['V']}"
  end
end

prints 版画

A00.- => Cholera
A00.0 => Cholera durch Vibrio cholerae O:1, Biovar cholerae
    Klassische Cholera
A00.1 => Cholera durch Vibrio cholerae O:1, Biovar eltor
    El-Tor-Cholera
    Choleraartige Dysenterie
    El-Tor-Enteritis

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM