代码之家  ›  专栏  ›  技术社区  ›  Streamline

如何最好地在rubyonrails中创建递归目录列表的xml映射?

  •  3
  • Streamline  · 技术社区  · 17 年前

    <directory> <file> name属性等于dir或文件名的元素。

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

    您对创建此内容的最佳方式有什么想法或方向吗?

    1 回复  |  直到 17 年前
        1
  •  2
  •   Streamline    17 年前

    好吧,我从来没有找到一个插件或任何似乎是为此而构建的东西。..所以我不得不自己滚。..这里有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