Voici comment analyser une structure arborescente YAML et agir sur chaque nœud, branche et feuille. Il vous donne également le parent de chaque nœud dont vous avez besoin, par exemple, lors du remplissage d'une arborescence de base de données à partir de votre fichier YAML. Il est un petit plus de @ sepp2k excellente réponse:
require 'yaml'
def traverse(obj,parent, &blk)
case obj
when Hash
obj.each do |k,v|
blk.call(k,parent)
# Pass hash key as parent
traverse(v,k, &blk)
end
when Array
obj.each {|v| traverse(v, parent, &blk) }
else
blk.call(obj,parent)
end
end
# Example, creating a database tree structure, from your YAML file.
# Passing nil to root node(s) as parent
tree_str =<<EOF
Regions:
- Asia
- Europe
- Americas
Other:
- Foo:
- bar
- buz
EOF
traverse(YAML.load(tree_str), nil) do |node,parent|
puts "Creating node '#{node}' with parent '#{ parent || 'nil' }'"
end
Tout d'abord, laissez-moi vous parler de YAML :: load_file (chemin) – kch
-vous au moins savoir ce que le nœud racine est? Hacher? Array? Y a-t-il du tout un format pour les nœuds suivants ou tout est-il inconnu? Puis-je supposer que vous voulez traverser les hachages et les tableaux, et que toute autre chose est une feuille? – kch
Pouvez-vous poster un exemple de fichier yaml pour gist ou pastie ou quelque part et le lier ici? Aussi, pouvez-vous nous donner une idée de ce que vous voulez faire pendant la traversée? Agir sur les feuilles? – kch