将 ElementTree 编写为规范化 XML (c14n)
Write ElementTree as canonicalized XML (c14n)
Python xml.etree
API 中的 ElementTree class 有一个 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')
只是抛出一个 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,
}
这到底是什么意思?
如何将 ElementTree 序列化为 Python 中的 c14n XML 文件?
C14N 序列化仅作为 Fredrik Lundh 开发的原始 ElementTree 独立库的实验性扩展实现,从未成为正式版本的一部分。
当库的1.3分支导入Python标准库时,包含了可选库的支持代码,但C14N序列化从来没有。稍后在可选组件导入代码 was removed altogether 中,但代码中仍多次提及 C14N。但是,文档从未提及 C14N,其余提及的内容应从 Python.
中删除
但是,如果您必须让它工作,您可以随时 download the original ElementC14N.py
module 并更新它以使用当前的 ElementTree 库。这确实需要一些工作;代码库是 Python 2 特定的,需要更新以处理 Unicode。
Python xml.etree
API 中的 ElementTree class 有一个 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')
只是抛出一个 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,
}
这到底是什么意思?
如何将 ElementTree 序列化为 Python 中的 c14n XML 文件?
C14N 序列化仅作为 Fredrik Lundh 开发的原始 ElementTree 独立库的实验性扩展实现,从未成为正式版本的一部分。
当库的1.3分支导入Python标准库时,包含了可选库的支持代码,但C14N序列化从来没有。稍后在可选组件导入代码 was removed altogether 中,但代码中仍多次提及 C14N。但是,文档从未提及 C14N,其余提及的内容应从 Python.
中删除但是,如果您必须让它工作,您可以随时 download the original ElementC14N.py
module 并更新它以使用当前的 ElementTree 库。这确实需要一些工作;代码库是 Python 2 特定的,需要更新以处理 Unicode。