使用 python 对 xml 文件进行排序

问题描述 投票:0回答:1

我有一个 xml 文件,想要按 dateB 对数据进行排序,如果存在,如果不存在,则按 dateA 排序 例如,对于 titi,我们将使用 dateA,对于 toto,我们将使用 dateB 比较它们并对文件进行排序,使 titi 信息先于 toto xml文件 日期 B 和日期 A 位于 2 个不同的标签中

你能用 python 命令帮我吗

python xml file sorting
1个回答
0
投票

使用自定义排序功能

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>
© www.soinside.com 2019 - 2024. All rights reserved.