class CFPropertyList::ReXMLParser

def import_xml(node)

import the XML values
def import_xml(node)
  ret = nil
  case node.name
  when 'dict'
    hsh = Hash.new
    key = nil
    if node.has_elements? then
      node.elements.each do |n|
        #print n.name + "\n"
        next if n.name == '#text' # avoid a bug of libxml
        next if n.name == '#comment'
        if n.name == "key" then
          key = get_value(n)
        else
          raise CFFormatError.new("Format error!") if key.nil?
          hsh[key] = import_xml(n)
          key = nil
        end
      end
    end
    ret = CFDictionary.new(hsh)
  when 'array'
    ary = Array.new
    if node.has_elements? then
      node.elements.each do |n|
        ary.push import_xml(n)
      end
    end
    ret = CFArray.new(ary)
  when 'true'
    ret = CFBoolean.new(true)
  when 'false'
    ret = CFBoolean.new(false)
  when 'real'
    ret = CFReal.new(get_value(node).to_f)
  when 'integer'
    ret = CFInteger.new(get_value(node).to_i)
  when 'string'
    ret = CFString.new(get_value(node))
  when 'data'
    ret = CFData.new(get_value(node))
  when 'date'
    ret = CFDate.new(CFDate.parse_date(get_value(node)))
  end
  return ret
end