将ElementTree作为典型的XML(C14N)



python xml.etree API中的elementTree类具有write()方法,该方法记录了可选的method参数:

*method* -- either "xml" (default), "html, "text", or "c14n"

至少使用Python 3.5(在Fedora 25上(使用此方法

import xml.etree.ElementTree as ET
# ... create some elements ...
tree = ET.ElementTree(root)
tree.write(filename, method='c14n')

只是投掷一个值:

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中序列到C14N XML文件?

c14n序列化仅作为Fredrik Lundh开发的原始ElementTree独立库的实验扩展而实现,并且从来都不是正式版本的一部分。

当将库的1.3分支导入到Python标准库中时,包括可选库的支持代码,但C14N序列化从未有。后来,在可选的组件进口代码上被完全删除,但代码中保留了一些C14N。但是,文档从未提及C14N,其余的提及应仅从Python中删除。

但是,如果您必须使其正常工作,则可以始终下载原始的ElementC14N.py模块,然后更新以与当前的ElementTree库一起使用。这确实需要一些工作;代码库是特定于Python 2的,需要更新以处理Unicode。

从Python 3.8开始,有人将ElementC14N.py功能包括在ElementTree中,因此您现在可以使用canonicalize()功能输出C14N CONOCICALIDIAD XML。此函数可用于 text ,而不是在ElementTree对象上使用,因此您必须先输出字符串。可悲的是,他们没有从 ElementTree.write()

中删除损坏的C14N支持

相关内容

  • 没有找到相关文章

最新更新