You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Nokogiri在TMX文件中搜索prop元素并提取对应值

解决思路

核心是利用Nokogiri的XPath条件查询能力,直接按属性值筛选目标节点,完全不依赖节点在tu下的排列顺序:

  • 筛选prop节点时,通过@type属性匹配对应的属性名,直接取节点文本
  • 筛选tuv节点时,通过@xml:lang属性匹配语言编码,再向下取seg节点的文本
可运行修改后代码
require 'nokogiri'

doc = File.open("test_for_import.xml") { |f| Nokogiri::XML(f) }

doc.xpath('//tu').each do |tu_node|
  # 取基础属性
  creation_date = tu_node.attributes["creationdate"]&.value
  user = tu_node.attributes["creationid"]&.value
  puts "Creation date: #{creation_date}"
  puts "User: #{user}"

  # 取Attribute1的值,不依赖节点顺序
  attribute1 = tu_node.at_xpath('./prop[@type="Att::Attribute1"]')&.text
  puts "Attribute1: #{attribute1}"
  # 其他属性同理,比如要Attribute2就把@type的值换成Txt::Attribute2即可

  # 按语言取seg内容
  source_text = tu_node.at_xpath('./tuv[@xml:lang="EN-US"]/seg')&.text
  target_text = tu_node.at_xpath('./tuv[@xml:lang="SL"]/seg')&.text
  puts "英文源文本: #{source_text}"
  puts "斯洛文尼亚语译文: #{target_text}"

  # 这里可以加将上述变量写入数据库的逻辑
end
补充说明
  • 代码中使用&.安全调用符,避免当前tu节点缺失对应属性/节点时抛出空指针异常,如果业务上要求这些字段必须存在,可以去掉安全调用符加判空校验逻辑
  • 如果需要支持多语言动态匹配,可以把语言编码存为变量,拼接进XPath查询语句即可

内容的提问来源于stack exchange,提问作者Sebastjan Hribar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:36:08