如何使用LXML转义特殊字符以编写XML
我有一个包含无效字符的XML文件。
<capability_camctrl_privilege>
<descr>Indicate whether to support “Manage Privilege”
<dependent>True</dependent>
我用下面的方式读取这个XML:
root = etree.fromstring("%s" % in_xml, parser=etree.XMLParser(recover=True))
然后我把读取到的XML保存到一个字典结构里。
最后,我对这个字典做了一些修改,想输出一个新的XML。
我创建了一个节点,代码是:node = etree.Element(STRING_WITH_SPECIAL_CHRACRTER)
但是我收到了一个错误信息:所有字符串必须是XML兼容的:Unicode或ASCII,不能有NULL字节
我尝试通过导入来转义这些无效字符串:
from xml.sax.saxutils import escape
from xml.sax.saxutils import quoteattr
但这并没有解决问题,有人能帮我解决这个问题吗?非常感谢!
使用的Python版本是2.7。
1 个回答
4
这是一个在使用 lxml
时常见的错误信息。解决这个问题的方法是,在用 lxml
之前,把字符串转换成 Unicode 格式。要做到这一点,你需要知道字符串的编码方式,不过如果你不知道的话,通常可以猜测是 UTF-8,这个猜测往往是正确的。
in_xml_unicode = unicode(in_xml, 'utf-8')
root = etree.fromstring(in_xml_unicode, parser=etree.XMLParser(recover=True))