Python 将ElementTree写入规范化XML(c14n)

Python 将ElementTree写入规范化XML(c14n),python,xml,fedora-25,c14n,Python,Xml,Fedora 25,C14n,Pythonxml.etreeAPI中的ElementTree类有一个write()方法,用于记录可选的method参数: *method* -- either "xml" (default), "html, "text", or "c14n" 至少在Python3.5(在Fedora25上)中,只是使用这种方法编写 import xml.etree.ElementTree as ET # ... create some elements ... tree = ET.ElementTree(r

Python
xml.etree
API中的ElementTree类有一个
write()
方法,用于记录可选的
method
参数:

*method* -- either "xml" (default), "html, "text", or "c14n"
至少在Python3.5(在Fedora25上)中,只是使用这种方法编写

import xml.etree.ElementTree as ET
# ... create some elements ...
tree = ET.ElementTree(root)
tree.write(filename, method='c14n')
只是抛出一个ValueError:

File "/usr/lib64/python3.5/xml/etree/ElementTree.py", line 751, in write
  raise ValueError("unknown method %r" % method)
ValueError: unknown method 'c14n'
ElementTree代码包含以下注释:

_serialize = {
    "xml": _serialize_xml,
    "html": _serialize_html,
    "text": _serialize_text,
# this optional method is imported at the end of the module
#   "c14n": _serialize_c14n,
}
这到底是什么意思


如何用Python将ElementTree序列化为c14n XML文件?

c14n序列化仅作为Fredrik Lundh开发的原始ElementTree独立库的实验性扩展实现,从未作为官方版本的一部分

当库的1.3分支被导入Python标准库时,包含了可选库的支持代码,但从未包含C14N序列化。稍后将介绍可选组件导入代码,但代码中仍多次提到C14N。但是,文档中从未提到过C14N,其余提到的内容应该从Python中删除

但是,如果必须让它工作,您可以随时更新它以使用当前的ElementTree库。这确实需要一些工作;代码库是特定于Python2的,需要更新以处理Unicode