lxml:在fromstring和tostring中保留相同的标记

时间:2014-01-15 10:05:05

标签: python xml lxml tostring

我正在使用lxml来解析XML消息。我想要做的是将字符串转换为xml消息,通过xpath指令提取一些信息,编辑一些属性,然后再将XML转换为字符串。

lxml在这方面做得很好,除了一件事:它不会尊重最初提供的标签声明。我的意思是,如果在你的输入中你有:

xml_str = "<root><tag><tutu/></tag></root>"

xml_str = "<root><tag><tutu></tutu></tag></root>"

以下代码将返回相同的内容:

>>> from lxml import etree
>>> root = etree.XML(xml_str)
>>> print etree.tostring(root)
<root><tag><tutu/></tag></root>

无论&lt; tutu /&gt;

是什么,都会呈现tutu标签

我发现here通过将元素的文本设置为'',我们可以强制显式渲染结束标记。

我的问题如下:我需要在调用lxml之前和之后使用完全相同的标记呈现(因为某些外部程序将对两个字符串执行字符串比较,并且将在&lt; tutu /&gt;上检测到不匹配&LT;短裙&GT;&LT; /短裙&GT)

我知道我们可以创建一个自定义的ElementTree类以及一个自定义解析器......在解析字符串时我想到的是在自定义ElementTree中保存我们拥有的标签类型(短或扩展)然后在调用tostring函数之前,更新树并将文本设置为None或''以保持与输入中相同类型的标记

问题是:我怎么知道我有什么类型的标签?或者您对如何解决这个问题有任何其他想法?

非常感谢你的帮助

0 个答案:

没有答案