【问题标题】:How do I escape special character to write XML using LXML如何转义特殊字符以使用 LXML 编写 XML
【发布时间】:2013-01-31 00:21:25
【问题描述】:

我有以下带有无效字符的 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))

并保存我在字典结构中加载的 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 版

【问题讨论】:

  • 您要准确包含哪些特殊/无效字符?
  • 致 James:特殊字符可能是“,我找到了函数 escape(),而 quoteattr 无法转义符号 -> “
  • 好的。 Element() 的第一个参数是标签名称(即&lt;descr&gt;...&lt;/descr&gt; 中的descr),不能包含引号字符。您确定您使用的是 API,因为它记录在案的工作?
  • 我没有将无效字符放入 TAG 名称中。无效字符试图放入 TEXT 。 XML_NODE.text,然后抛出异常和错误消息!是否有任何函数可以转义 LXML 中的任何无效字符,例如“:“ ” ”
  • 也许发布一个导致问题的小型独立示例会有所帮助?这可能会让人们更容易提供帮助。

标签: python xml-parsing python-2.7 lxml


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多