我有一个 xml 文件,想要按 dateB 对数据进行排序,如果存在,如果不存在,则按 dateA 排序 例如,对于 titi,我们将使用 dateA,对于 toto,我们将使用 dateB 比较它们并对文件进行排序,使 titi 信息先于 toto xml文件 日期 B 和日期 A 位于 2 个不同的标签中
你能用 python 命令帮我吗
使用自定义排序功能
import xml.etree.ElementTree as ET
from datetime import datetime
xml = '''<root>
<node>
<dateA>2023-05-01</dateA>
<detail>
<name>titi</name>
</detail>
</node>
<node>
<dateA>2001-05-01</dateA>
<detail>
<name>miki</name>
</detail>
</node>
<node>
<dateA>2024-05-01</dateA>
<detail>
<name>toto</name>
<dateB>2027-06-02</dateB>
</detail>
</node>
</root> '''
def sort_by_date(node):
date_b = node.find('.//dateB')
if date_b is not None:
date = date_b.text
else:
date = node.find('.//dateA').text
return datetime.strptime(date, "%Y-%m-%d").date()
root = ET.fromstring(xml)
nodes = root.findall('.//node')
nodes.sort(key=sort_by_date)
for node in nodes:
root.remove(node)
root.extend(nodes)
ET.dump(root)
输出
<root>
<node>
<dateA>2001-05-01</dateA>
<detail>
<name>miki</name>
</detail>
</node>
<node>
<dateA>2023-05-01</dateA>
<detail>
<name>titi</name>
</detail>
</node>
<node>
<dateA>2024-05-01</dateA>
<detail>
<name>toto</name>
<dateB>2027-06-02</dateB>
</detail>
</node>
</root>