Example #1
0
 def _serialize_xml(write, elem, qnames, namespaces):
     tag = elem.tag
     text = elem.text
     if tag is etree.Comment:
         write("<!--%s-->" % text)
     elif tag is etree.ProcessingInstruction:
         write("<?%s?>" % text)
     else:
         tag = qnames[tag]
         if tag is None:
             if text:
                 write(etree._escape_cdata(text))
             for e in elem:
                 etree._serialize_xml(write, e, qnames, None)
         else:
             write("<" + tag)
             items = list(elem.items())
             if items or namespaces:
                 if namespaces:
                     for v, k in sorted(
                             namespaces.items(),
                             key=lambda x: x[1]):  # sort on prefix
                         if k:
                             k = ":" + k
                         write(" xmlns%s=\"%s\"" %
                               (k, etree._escape_attrib(v)))
                 for k, v in list(items):  # no !!!! lexical order
                     if isinstance(k, etree.QName):
                         k = k.text
                     if isinstance(v, etree.QName):
                         v = qnames[v.text]
                     else:
                         v = etree._escape_attrib(v)
                     write(" %s=\"%s\"" % (qnames[k], v))
             if text or len(elem):
                 write(">")
                 if text:
                     write(etree._escape_cdata(text))
                 for e in elem:
                     etree._serialize_xml(write, e, qnames, None)
                 write("</" + tag + ">")
             else:
                 write(" />")
     if elem.tail:
         write(etree._escape_cdata(elem.tail))