使用Nokogiri筛选符合条件的XML子集并提取Code元素列表
Nokogiri XML解析筛选实现方案
你可以通过以下步骤完成筛选和提取:
require 'nokogiri' require 'rubygems' # 低版本Ruby环境需额外引入该库来使用Gem::Version # 复用你已有的CodeList节点查询结果 all_codelists = document.css("structure|CodeList") # 第一步:筛选出isFinal属性为true的节点 final_codelists = all_codelists.select { |list| list['isFinal'] == 'true' } # 第二步:筛选出version最高的节点 # 使用Gem::Version处理版本号,避免直接转浮点数导致的1.10 < 1.2这类错误 target_codelist = final_codelists.max_by { |list| Gem::Version.new(list['version']) } # 第三步:提取目标节点下所有Code元素 if target_codelist codes = target_codelist.css("structure|Code") # 按需遍历处理每个Code节点即可,示例: codes.each do |code| puts "Code值:#{code['value']}" # 读取多语言描述示例 code.css("structure|Description").each do |desc| puts "#{desc['xml:lang']} 描述:#{desc.content}" end end else # 可在此处添加无符合条件CodeList时的兜底逻辑 end
核心逻辑说明
- Nokogiri的XML元素节点支持直接通过
节点['属性名']读取属性值,XML中所有属性值默认为字符串类型,因此判断isFinal时直接和字符串"true"比较即可。 - 版本号比较使用Ruby内置的
Gem::Version类,适配各类标准版本号格式的大小判断,兼容性更好。 - 拿到目标CodeList节点后,直接在该节点对象上调用
css方法,只会查询该节点范围内的子元素,不会匹配文档其他位置的同类型节点。
内容的提问来源于stack exchange,提问作者user1185081
相关产品推荐
相关产品推荐

