如何使用LXML转义特殊字符以编写XML

时间:2013-01-31 00:21:26

标签: python xml-parsing python-2.7 lxml

我有以下带有无效字符的XML

  <capability_camctrl_privilege>
  <descr>Indicate whether to support &#8220;Manage Privilege&#8221; 
  <dependent>True</dependent>

我用以下方式读取XML root = etree.fromstring("%s" % in_xml, parser=etree.XMLParser(recover=True))

并保存我在Dictionary结构中加载的XML,

最后我做了一些修改并尝试输出新的XML,

node = etree.Element(STRING_WITH_SPECIAL_CHRACRTER)

我收到错误消息All strings must be XML compatible: Unicode or ASCII, no NULL bytes

我试图通过导入

转义无效字符串
from xml.sax.saxutils import escape
from xml.sax.saxutils import quoteattr

然而它不起作用,是否有人可以帮助我解决问题? 非常感谢你!

Python版本2.7

1 个答案:

答案 0 :(得分:3)

这是lxml的常见错误消息。解决方案是在将字符串与lxml一起使用之前将其转换为unicode。要做到这一点,你需要知道编码,但如果你不知道的话,猜测 UTF-8 通常是正确的。

in_xml_unicode = unicode(in_xml, 'utf-8')
root = etree.fromstring(in_xml_unicode, parser=etree.XMLParser(recover=True))