parameters: (xml_parts, specification, pretty, level=0)
docstring: Appends the XML parts corresponding to the specification.
  
    Args:
      xml_parts: A list of XML parts to be appended to.
      specification:  The specification of the element.  See EasyXml docs.
      pretty: True if we want pretty printing with indents and new lines.
      level: Indentation level.
docstring_summary: Appends the XML parts corresponding to the specification.
docstring_tokens: Appends the XML parts corresponding to the specification .
function: def _ConstructContentList(xml_parts, specification, pretty, level=0):
    """ Appends the XML parts corresponding to the specification.
  
    Args:
      xml_parts: A list of XML parts to be appended to.
      specification:  The specification of the element.  See EasyXml docs.
      pretty: True if we want pretty printing with indents and new lines.
      level: Indentation level.
    """
    # The first item in a specification is the name of the element.
    if pretty:
      indentation = '  ' * level
      new_line = '\n'
    else:
      indentation = ''
      new_line = ''
    name = specification[0]
    if not isinstance(name, str):
      raise Exception('The first item of an EasyXml specification should be '
                      'a string.  Specification was ' + str(specification))
    xml_parts.append(indentation + '<' + name)
  
    # Optionally in second position is a dictionary of the attributes.
    rest = specification[1:]
    if rest and isinstance(rest[0], dict):
      for at, val in sorted(rest[0].items()):
        xml_parts.append(' %s="%s"' % (at, _XmlEscape(val, attr=True)))
      rest = rest[1:]
    if rest:
      xml_parts.append('>')
      all_strings = reduce(lambda x, y: x and isinstance(y, str), rest, True)
      multi_line = not all_strings
      if multi_line and new_line:
        xml_parts.append(new_line)
      for child_spec in rest:
        # If it's a string, append a text node.
        # Otherwise recurse over that child definition
        if isinstance(child_spec, str):
         xml_parts.append(_XmlEscape(child_spec))
        else:
          _ConstructContentList(xml_parts, child_spec, pretty, level + 1)
      if multi_line and indentation:
        xml_parts.append(indentation)
      xml_parts.append('</%s>%s' % (name, new_line))
    else:
      xml_parts.append('/>%s' % new_line)
function_tokens: def _ConstructContentList ( xml_parts , specification , pretty , level = 0 ) : # The first item in a specification is the name of the element. if pretty : indentation = '  ' * level new_line = '\n' else : indentation = '' new_line = '' name = specification [ 0 ] if not isinstance ( name , str ) : raise Exception ( 'The first item of an EasyXml specification should be ' 'a string.  Specification was ' + str ( specification ) ) xml_parts . append ( indentation + '<' + name ) # Optionally in second position is a dictionary of the attributes. rest = specification [ 1 : ] if rest and isinstance ( rest [ 0 ] , dict ) : for at , val in sorted ( rest [ 0 ] . items ( ) ) : xml_parts . append ( ' %s="%s"' % ( at , _XmlEscape ( val , attr = True ) ) ) rest = rest [ 1 : ] if rest : xml_parts . append ( '>' ) all_strings = reduce ( lambda x , y : x and isinstance ( y , str ) , rest , True ) multi_line = not all_strings if multi_line and new_line : xml_parts . append ( new_line ) for child_spec in rest : # If it's a string, append a text node. # Otherwise recurse over that child definition if isinstance ( child_spec , str ) : xml_parts . append ( _XmlEscape ( child_spec ) ) else : _ConstructContentList ( xml_parts , child_spec , pretty , level + 1 ) if multi_line and indentation : xml_parts . append ( indentation ) xml_parts . append ( '</%s>%s' % ( name , new_line ) ) else : xml_parts . append ( '/>%s' % new_line )