docs: def dict_from_node(node, recursive=False):
      """
      Converts ElementTree node to a dictionary.
  
      Parameters
      ----------
      node : ElementTree node
      recursive : boolean
          If recursive=False, the value of any field with children will be the
          number of children.
  
      Returns
      -------
      dict : nested dictionary.
          Tags as keys and values as values. Sub-elements that occur multiple
          times in an element are contained in a list.
      """
  
      dict = {}
      for snode in node:
          if len(snode) > 0:
              if recursive:
                  # Will drill down until len(snode) <= 0.
                  value = dict_from_node(snode, True)
              else:
                  value = len(snode)
          elif snode.text is not None:
              value = snode.text
          else:
              value = u''
  
          if snode.tag in dict.keys():    # If there are multiple subelements
                                          #  with the same tag, then the value
                                          #  of the element should be a list
                                          #  rather than a dict.
              if type(dict[snode.tag]) is list:   # If a list has already been
                                                  #  started, just append to
                                                  #  it.
                  dict[snode.tag].append(value)
              else:
                  dict[snode.tag] = [ dict[snode.tag], value ]
          else:
              dict[snode.tag] = value     # Default behavior.
      return dict