我尝试在XML字符串中的标记缺少属性时添加属性值,并打印出修改后的字符串。代码是我从各种来源粗略收集的拼凑物,因此如果这不是最佳实践,请道歉。
代码是这样的-
import xml.etree.ElementTree as ET
import time
xml_string = """
<message>
<info xmlns="urn:xmpp:info" />
</message>
"""
root = ET.fromstring(xml_string)
ns = {'ns': 'urn:xmpp:info'}
for info in root.findall(".//ns:info", ns):
sent_time = info.attrib.get("sent_time_millis")
if not sent_time:
sent_time = str(int(time.time() * 1000))
info.attrib["sent_time_millis"] = sent_time
print(ET.tostring(root, encoding='unicode'))
break
运行时会产生类似于以下的结果-
<message xmlns:ns0="urn:xmpp:info">
<ns0:info sent_time_millis="1675533312576" />
</message>
当期望的输出应该是这样的时候-
<message>
<info xmlns="urn:xmpp:info" sent_time_millis="1675533086777" />
</message>
我肯定我漏掉了一些基本的东西.我该怎么做这个修改呢?
谢谢。
1条答案
按热度按时间7uzetpgm1#
ElementTree以一种令人讨厌的方式摆弄名称空间(即使语义没有改变)。lxml不这样做,因此解决方案是使用该库。
安装lxml并在代码中将
import xml.etree.ElementTree as ET
更改为from lxml import etree as ET
。