在XML中删除重复节点

1 投票
1 回答
1886 浏览
提问于 2025-04-16 06:47

我正在用Python和markup.py生成一个XML文件……之前一切都很顺利,但由于最近对脚本做了一些修改,现在在节点中出现了重复的值,这是因为我加了一些检查。下面是输出的一个示例(这些是车辆记录):

<?xml version='1.0' encoding='UTF-8' ?>
<datafeed>
<vehicle>
    <vin>2HNYD18816H532105</vin>
    <features>
        <feature>AM/FM Radio</feature>
        <feature>Air Conditioning</feature>
        <feature>Anti-Lock Brakes (ABS)</feature>
        <feature>Alarm</feature>
        <feature>CD Player</feature>
        <feature>Air Bags</feature>
        <feature>Air Bags</feature>
        <feature>Anti-Lock Brakes (ABS)</feature>
        <feature>Alarm</feature>
        <feature>Air Bags</feature>
        <feature>Alarm</feature>
        <feature>Air Bags</feature>
    </features>
</vehicle>
<vehicle>
    <vin>2HKYF18746H537006</vin>
    <features>
        <feature>AM/FM Radio</feature>
        <feature>Anti-Lock Brakes (ABS)</feature>
        <feature>Air Bags</feature>
        <feature>Air Bags</feature>
        <feature>Anti-Lock Brakes (ABS)</feature>
        <feature>Alarm</feature>
        <feature>Air Bags</feature>
        <feature>Alarm</feature>
    </features>
</vehicle>
</datafeed>

这是一个更大XML文件中的小片段,里面有超过100条记录。我该怎么做才能去掉这些重复的节点呢?

1 个回答

1

在XML中其实没有真正的“重复”这个概念。每个节点都是独一无二的。不过我明白你想要去掉你自己理解中的所有重复特征。

你可以通过解析这个树状结构,把特征(节点的值)放进一个集合里(这样就能去掉重复的值),然后再写出一个新的XML文档。

既然你是用Python生成这个文件的,你应该在创建的时候就修改代码,确保一开始就不生成重复的值。你可以告诉我们一下markup.py是干什么的。

编辑

我刚刚快速看了一下这个markup脚本,你的脚本里可能会出现这样的内容:

// well, this might come from somewhere else, but I guess you have such a list somewhere
features = [ 'AM/FM Radio', 'Air Conditioning', 'Anti-Lock Brakes (ABS)', 'Alarm', 'CD Player', 'Air Bags', 'Air Bags', 'Anti-Lock Brakes (ABS)', 'Alarm', 'Air Bags', 'Alarm', 'Air Bags' ]

// write the XML
markup.features.open()
markup.feature( features )
markup.features.close()

在这种情况下,只需在传递给markup脚本之前,把特征变成一个set

// write the XML
markup.features.open()
markup.feature( set( features ) )
markup.features.close()

如果你有多个独立的列表,每个列表里包含一个车辆的特征,先把这些列表(或集合)合并起来:

list1 = [...]
list2 = [...]
list3 = [...]
features = set( list1 + list2 + list3 )

撰写回答