I'm trying to add an attribute value to a tag in an XML string when the attribute is missing, and print out the modified string. Code is patchwork that I've roughly gleaned from various sources, so apologies if this isn't best practice.
Here's what the code looks like-
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
This results in something like this when run-
<message xmlns:ns0="urn:xmpp:info">
<ns0:info sent_time_millis="1675533312576" />
</message>
When the desired output should be something like this-
<message>
<info xmlns="urn:xmpp:info" sent_time_millis="1675533086777" />
</message>
I'm missing something basic, I'm sure. How should I go about this modification?
Thanks.