Module: Plist4r::Backend::Libxml4r
- Defined in:
- lib/plist4r/backend/libxml4r.rb
Class Methods
Overview
This backend uses Libxml4r / Libxml-Ruby to parse xml plists
Class Method Details
+ (Object) from_xml(plist)
87 88 89 90 91 92 |
# File 'lib/plist4r/backend/libxml4r.rb', line 87 def from_xml plist hash = parse_plist_xml plist.from_string plist.import_hash hash plist.file_format "xml" return plist end |
+ (Object) parse_plist_xml(string)
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/plist4r/backend/libxml4r.rb', line 68 def parse_plist_xml string ::LibXML::XML.default_keep_blanks = false doc = string.to_xmldoc doc.strip! root = doc.node["/plist/dict"] ordered_hash = nil if root ordered_hash = tree_hash root else root = doc.node["/plist/array"] if root ordered_hash = ::Plist4r::OrderedHash.new ordered_hash["Array"] = tree_array root end end ordered_hash end |
+ (Object) tree_array(n)
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/plist4r/backend/libxml4r.rb', line 41 def tree_array n array = [] n.children.each do |node| case node.name when "true", "false" array << eval(node.name) when "string" array << node.inner_xml when "integer" array << node.inner_xml.to_i when "real" array << node.inner_xml.to_f when "date" array << Time.parse(node.inner_xml) when "data" bstr = bstr = Base64.decode64(node.inner_xml) bstr.blob = true array << bstr when "array" array << tree_array(node) when "dict" array << tree_hash(node) end end return array end |
+ (Object) tree_hash(n)
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/plist4r/backend/libxml4r.rb', line 11 def tree_hash n hash = ::Plist4r::OrderedHash.new n_xml_keys = n.nodes["key"] n_xml_keys.each do |n| k = n.inner_xml vnode = n.next case vnode.name when "true", "false" hash[k] = eval(vnode.name) when "string" hash[k] = vnode.inner_xml when "integer" hash[k] = vnode.inner_xml.to_i when "real" hash[k] = vnode.inner_xml.to_f when "date" hash[k] = Time.parse vnode.inner_xml when "data" bstr = Base64.decode64(vnode.inner_xml) bstr.blob = true hash[k] = bstr when "array" hash[k] = tree_array(vnode) when "dict" hash[k] = tree_hash(vnode) end end return hash end |