Create xml with elementtree ET and xml escaping

MRAB python at
Tue Dec 11 20:59:54 CET 2012

On 2012-12-11 17:47, nenad.cikic at wrote:
> Hello, I have posted the same in XML group but it seems pretty dead there so I will repost here.
> I am new to xml processing in python.
> I am looking to create XML. Xml is not too difficult so I thought to create it manually using ElementTree.
> First I noted that ET.toString does escape <>& but not " and '
> Is that normal?
" needs to be encoded when it's in an attribute's value:

     <tag value="a quote (")">

because it's also being used as a delimiter in that case, but elsewhere
it has no special meaning.

> Since I have also the need to sign the XML I need the ability to create xml but without xml escaping (unescaped data are signed).

XML with the escaping isn't valid XML.

> If i do ET.toString(root,'utf8',text') i do not get the xml tags and if I do ET.toString(root,'utf8') I get escaped chars.
> For example:
> a=ET.Element('a')
> b=ET.SubElement(a,'b')
> b.text=u"šđ<>&"
> ET.tostring(a,'utf8')
> outputs to
> "<?xml version='1.0' encoding='utf8'?>\n<a><b>\xc5\xa1\xc4\x91<>&</b></a>"
> ET.tostring(a,'utf8',method='text')
> outputs to
> "\xc5\xa1\xc4\x91<>&"
> and I need before singing
> <a><b>\xc5\xa1\xc4\x91<>&</b></a>
> and after signing
> <a><b>\xc5\xa1\xc4\x91<>&</b></a>
> Is there some way other than string replace?

More information about the Python-list mailing list