Python:null字符破坏xml格式

时间:2016-08-29 13:04:40

标签: python xml

我有一些python代码处理输入文件并将某些字段从输入转储到XML文件。从输入传递空字符时,此代码中断 - 抛出无效的令牌错误:

def pretty_print_xml(elem):

    rough_string = ET.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    return reparsed.toprettyxml(indent='    ')

这令我感到惊讶,我想知道为什么它会破坏,还有什么可能需要从输入中消毒。我认为只有一个XML元字符可能会抛出这个错误,而这些错误已经由minidom处理了。

1 个答案:

答案 0 :(得分:1)

XML中不允许使用NUL文字。见the XML standard, version 1.1

  

2.2字符

     

[定义:解析后的实体包含文本,characters的序列,可以表示标记或字符数据。] [定义:字符是ISO / IEC 10646 {{ 3}}。合法字符包括制表符,回车符,换行符以及Unicode和ISO / IEC 10646的合法字符。[ISO/IEC 10646]中引用的这些标准的版本在编写本文档时是最新的。可以通过修订或新版本将新字符添加到这些标准中。因此,XML处理器必须接受为A.1 Normative References指定的范围内的任何字符。]

[2]       Char       ::=      [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */
[2a]      RestrictedChar     ::=      [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]

请注意Char被定义为允许(在其他范围内)\x01\xD7FF - 但 \x00

顺便说一句 - 如果您的目标是漂亮打印,我建议使用lxml.etree。如果序列化调用上的Char无法开箱即用,请参阅the pretty_print=True argument