2009-03-31 4 views
3

Ich möchte eine XML-Karte aller Verzeichnisse und Dateien in meinem öffentlichen/Kataloge Schienen Verzeichnis bauen. (Rekursive Karte)Wie erstellt man am besten eine XML-Map eines rekursiven Verzeichnisses in rubyonrails?

Ich möchte es mit grundlegenden <directory> <file> Element mit Namen dem Verzeichnis oder eine Datei-Attribut gleich gebaut werden Name.

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

Ich bin nur nicht sicher, was der beste Weg, rekursive Karte xml zu tun - ich für ein Plugin gesucht, die damit umgehen könnte, da es, wie es jemand etwas scheint könnte allerdings haben zu konstruieren.

Irgendwelche Gedanken oder Richtung auf dem besten Weg, dies zu schaffen?

Antwort

2

Nun, ich habe nie ein Plugin oder etwas gefunden, das dafür gebaut zu sein scheint ... also musste ich mein eigenes ... rollen ... hier ist es komplett mit Attributen für sha und url, da ich sie brauchte. Hoffe das hilft jemand anderem.

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 
Verwandte Themen