220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
|
# File 'lib/common.rb', line 220
def xml_node_to_hash(node)
if node.element?
result_hash = {}
if node.attributes != {}
attributes = {}
node.attributes.keys.each do |key|
attributes[node.attributes[key].name.to_sym] = node.attributes[key].value
end
end
if node.children.size > 0
node.children.each do |child|
result = xml_node_to_hash(child)
if child.name == "text"
unless child.next_sibling || child.previous_sibling
return result unless attributes
result_hash[child.name.to_sym] = result
end
elsif result_hash[child.name.to_sym]
if result_hash[child.name.to_sym].is_a?(Object::Array)
result_hash[child.name.to_sym] << result
else
result_hash[child.name.to_sym] = [result_hash[child.name.to_sym]] << result
end
else
result_hash[child.name.to_sym] = result
end
end
if attributes
result_hash = attributes.merge(result_hash)
end
return result_hash
else
return attributes
end
else
return node.content.to_s
end
end
|