Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Ruby搜索/检查YAML文档中的值_Ruby_Yaml_Psych - Fatal编程技术网

使用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')
  • 使用ypath/xpath检查yaml文档是否包含特定键的值
  • 使用ypath/xpath为指定键选择值

    文件yaml

    app:
        name: xxx
        version: xxx
    description:
        author:
            name: xxx
            surname: xxx
            email: xxx@xxx.xx
    
    检查的内容:

  • 谷歌
  • 堆栈溢出
  • RubyAPI(YAML::DBM作为它提供的方法之一是select)
  • 示例:

    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。谢谢。