Python: lxml.etree.tostring(不带注释)
我执行了以下命令,但出现了这个错误:
>>>lxml.etree.tostring([tree].getroot(), with_comments=False)
ValueError: Can only discard comments in C14N serialisation
我不知道C14N是什么,但我希望能得到一个解释,告诉我如何实现它,并在运行之前的命令时使用 with_comments=False
。 (是的,我知道可以用正则表达式去掉注释,但请不要把正则表达式当作解决方案。)
背景:我想通过http连接传输我的xml文档。我正在使用lxml这个Python库,运行的环境是Python 2.7.1。
2 个回答
9
你可以在解析的时候去掉注释:
parser = etree.XMLParser(remove_comments=True)
tree = etree.parse(xmlfile, parser=parser)
或者在使用 objectify 的时候(我花了很长时间才发现这一点):
parser = objectify.makeparser(remove_comments=True)
tree = objectify.parse(xmlfile, parser=parser)
3
lxml.etree.tostring 的文档中提到:
exclusive 和 with_comments 这两个参数只在使用 C14N 输出时有效,分别用于请求独占和不带注释的 C14N 序列化。
这个参数只有在使用 method='c14n'
时才有效。你可以不写这个参数,按照我所知道的,它不会包含注释。即使包含了,接收方的 XML 解析器也应该会忽略这些注释,所以除非你担心带宽问题或者有特别的需求,否则我觉得不用太担心这个。