code: def dom_to_dict(root_node):
  
      
  
      # Remove namespaces from tagname
  
      tag = root_node.tagName
  
      if ":" in tag:
  
          tag = tag.split(":")[1]
  
      root_dict = {
          tag: {}
      }
  
      node_dict = root_dict[tag]
  
      # Set attributes
  
      if root_node.hasAttributes():
  
          for key in list(root_node.attributes.keys()):
  
              node_dict[key] = root_node.getAttribute(key)
  
      # Check out child nodes
  
      for child in root_node.childNodes:
  
          if child.nodeType == root_node.TEXT_NODE:
  
              # This is the content
  
              node_dict['_content'] = child.data
  
          else:
  
              subnode_dict = dom_to_dict(child)
  
              child_tag = child.tagName
  
              if ":" in child_tag:
  
                  child_tag = child_tag.split(":")[1]
  
              new_val = subnode_dict[child_tag]
  
              # If we have several child with same name, put them in a list.
  
              if child_tag in node_dict:
                  prev_val = node_dict[child_tag]
  
                  if type(prev_val) != list:
                      node_dict[child_tag] = [prev_val]
  
                  node_dict[child_tag].append(new_val)
  
              else:
                  node_dict[child_tag] = new_val
  
      return root_dict
docs: Serializes the given node to the dictionary
  
      Serializes the given node to the documented dictionary format.
  
      :param root_node: Node to serialize
      :returns: The dictionary
      :rtype: dict