# File rubilicious.rb, line 358
  def self.xbel(src_ary, tag = nil)
    ret = [ "<?xml version='1.0' encoding='utf-8'?>",
            "<xbel version='1.0' added='#{Time.now.iso8601}'>",
            "  <title>#{@user}'s Delicious Bookmarks</title>" ]
  
    # find all bookmarks in list with given tag and sort tag
    tags = src_ary.find_all { |e| 
      !tag || e['tags'].include?(tag) 
    }.inject({}) do |tags, bm|
      if bm['tags'] && bm['tags'].size > 0
        bm['tags'] = bm['tags'] ? bm['tags'].split(' ').sort : []
        # TODO: alias support
        bm['tags'].each { |tag| tags[tag] ||= []; tags[tag] << bm }
      else 
        tags['uncategorized'] ||= []
        tags['uncategorized'] << bm
      end

      tags
    end
    
    # print the folders out in order
    tags.keys.sort.each do |tag|
      ary = tags[tag]
      ret <<  [ 
        "  <folder id='#{tag}' added='#{Time.now.iso8601}'>",
        # "  <folder id='#{tag}'>",
        "    <title>#{tag.capitalize}</title>",

        ary.sort { |a, b| a['description'] <=> b['description'] }.map do |bm|
          href, bm_id = CGI.escape(bm['href']), "#{tag}-#{bm['hash']}", 
          time = bm['time'].iso8601
          title = CGI.escapeHTML(bm['description'] || '')
          desc = CGI.escapeHTML(bm['extended'] || '')

          [ "    <bookmark href='#{href}' id='#{bm_id}' added='#{time}'>",
          # [ "    <bookmark href='#{href}' id='#{bm_id}'>",
            "      <title>#{title}</title>",
            "      <desc>#{desc}</desc>",
            "    </bookmark>" ,
          ].join("\n")
        end.join("\n"),

        '  </folder>',
      ].join("\n")
    end

    # attach closing tag and return string
    ret << '</xbel>'
    ret.join("\n")
  end