Ruby Nokogiri xml 解析
Ruby Nokogiri xml parsing
给定以下节点,我想搜索值 "H90.5" 和 return 属性字符串 dx1
<fld-21 dx-version="ICD10" dx1="H90.5" dx2="I25.9" dx3="I25.3" dx4="" dx5="" dx6="" dx7="" dx8="" dx9="" dx10="" dx11="" dx12=""/>
鉴于:
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
它returns:
[["dx1"]]
否则,您可以使用 .at
代替 .css
,使用 .detect
代替 .select
。
这是搜索属性的 xpath 技巧:
doc.at('//@*[.="H90.5"]').name
给定以下节点,我想搜索值 "H90.5" 和 return 属性字符串 dx1
<fld-21 dx-version="ICD10" dx1="H90.5" dx2="I25.9" dx3="I25.3" dx4="" dx5="" dx6="" dx7="" dx8="" dx9="" dx10="" dx11="" dx12=""/>
鉴于:
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
它returns:
[["dx1"]]
否则,您可以使用 .at
代替 .css
,使用 .detect
代替 .select
。
这是搜索属性的 xpath 技巧:
doc.at('//@*[.="H90.5"]').name