2009-03-31 11 views
3

私はそれが名前の基本的な<directory> <file>要素で構成することがしたいと思います。私の公開/カタログ内のすべてのディレクトリとファイルのXMLマップは、ディレクトリをレール構築したい(再帰マップ)ruby​​onrailsに再帰的なディレクトリリストのxmlマップを作成するにはどうすればいいですか?

は、ディレクトリやファイルに等しい属性名。

<catalogs> 
<file name="index.html"> 
<directory name="foo"> 
    <file name="file1.html" /> 
    <directory name="bar"> 
     <file name="file2.html" /> 
    </directory> 
</directory> 
</catalogs> 

私は最善の方法は、XMLに再帰的なマップを何をすべきかだけを確認していない - 私はそれが何かを誰かが構築するのにかかわらず、必要がある場合がありますことのように思えるので、これを処理するかもしれないプラグインを探しました。

これを作成するには、どのような考え方や方向性がありますか?

答えて

2

まあ、プラグインやこれを行うために構築されているように見えることはありませんでした...私は自分自身をロールバックしなければならなかった...ここで私はそれらを必要としたので、shaとurlの属性で完全です。これが他の人に役立つことを願っています

xml = Builder::XmlMarkup.new(:indent => 2,:escape_attrs => true) 
xml.instruct!  
xml.catalogs(:version=>2) {list_entries("#{CATALOG_PATH}", xml)} 
File.open("#{RAILS_ROOT}/public/catalogs.xml", 'w') {|f| f.write(xml.target!) } 

def list_entries(dir,xml) 
    Dir.glob("#{dir}/*") do |entry| 
    if File::directory?(entry) 
     xml.directory(:name=>File.basename(entry)) { 
     list_entries(entry, xml) 
     } 
    else 
     xml.file(:name=>File.basename(entry),:sha => Digest::SHA256.hexdigest(entry), 
     :url=>entry.gsub("#{CATALOG_PATH}","#{CATALOG_URL}")) 
    end 
    end 
end 
関連する問題