使用Ruby搜索/检查YAML文档中的值
我的目标:使用Ruby搜索/检查YAML文档中的值,ruby,yaml,psych,Ruby,Yaml,Psych,我的目标: Module::Class.select('description/author/name') Module::Class.select('*/name') Module::Class.isset?('*/name') 使用ypath/xpath检查yaml文档是否包含特定键的值 使用ypath/xpath为指定键选择值 文件yaml: app: name: xxx version: xxx description: author: name
Module::Class.select('description/author/name')
Module::Class.select('*/name')
Module::Class.isset?('*/name')
app:
name: xxx
version: xxx
description:
author:
name: xxx
surname: xxx
email: xxx@xxx.xx
检查的内容:
Module::Class.select('description/author/name')
Module::Class.select('*/name')
Module::Class.isset?('*/name')
使用yaml:
require 'yaml'
yml = YAML.load_file('your_file.yml')
现在yml是一个散列。你可以像使用一样使用它。以下是一个简单而丑陋的解决方案:
if !yml["description"].nil? && !yml["description"]["author"].nil? && !yml["description"]["author"]["name"].nil? && !yml["description"]["author"]["name"].empty?
puts "An author is set!"
end
由于没有最新的YPath实现,我建议您给我一个机会
ActiveSupport
和Nokogiri
:
yml = LOAD_YML_WITH_YOUR_PREFERRED_YAML_ENGINE
# ActiveSupport adds a to_xml method to Hash
xml = yml.to_xml(:root => 'yaml')
doc = Nokogiri::XML(xml)
doc.xpath("description/author/name").map do |name|
puts [name['key'], name['value']]
end
您好,谢谢回复,但这不是我的意思,我已经更新了我的目标部分。对不起,链接到错误的答案。看看这里:是的,我也看到了,但问题是pdf中没有附任何示例。您看到用户所指的rdoc了吗?当然,但不幸的是,它没有以示例的方式很好地记录(工作)。除非有人已经在Ruby YAML中与ypath合作,否则我将不得不挖掘更多,并尝试找到合适的方法。。。但我宁愿从一开始就不发明轮子:)是的,我们不能使用YPath。我曾经尝试过使用YAML/Psych::DBM,但运气不好。我在Nokogiri gem中使用XML而不是YAML。谢谢。