Руби Nokogiri XML-разбор - PullRequest
       9

Руби Nokogiri XML-разбор

0 голосов
/ 03 декабря 2018

Учитывая следующий узел, я хочу найти значение "H90.5" и вернуть строку атрибута dx1

<fld-21 dx-version="ICD10" dx1="H90.5" dx2="I25.9" dx3="I25.3" dx4="" dx5="" dx6="" dx7="" dx8="" dx9="" dx10="" dx11="" dx12=""/>

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Вот хитрость xpath для поиска атрибутов:

doc.at('//@*[.="H90.5"]').name
0 голосов
/ 03 декабря 2018

Дано:

frag = Nokogiri::XML.fragment('<fld-21 dx-version="ICD10" dx1="H90.5" dx2="I25.9" dx3="I25.3" dx4="" dx5="" dx6="" dx7="" dx8="" dx9="" dx10="" dx11="" dx12=""/>')

Если у вас есть несколько элементов и несколько возможных атрибутов, вы можете сделать:

frag.css('fld-21').map do |node|
  node.attributes.select do |key, attr|
     key =~ /dx\d+/ && attr.value == "H90.5"
  end.keys
end

Возвращает:

[["dx1"]]

В противном случае выможно использовать .at вместо .css и .detect вместо .select.

...