我正在使用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或''以保持与输入中相同类型的标记
问题是:我怎么知道我有什么类型的标签?或者您对如何解决这个问题有任何其他想法?
非常感谢你的帮助