使用Python ElementT查找和编辑XML中的子元素

2024-10-01 07:12:28 发布

您现在位置:Python中文网/ 问答频道 /正文

因为我处理的XML文件有不一致的子元素,所以我在查找和编辑一个特定的子元素时遇到了一些困难,这个子元素直到文件的下一步才会出现在元素序列中。 我使用的是Python 2.7.1中包含的ElementTree。在

下面是我正在处理的XML文件类型的一个示例:

<?xml vin="1.0" encoding="UTF-8" standalone="yes"?>

<whatever id='Subaru' YouCanDriveMyCar='Wednesday' transmission='stick'>
        <model id='Ford' year='1972'>A</model>
        <model id='Chevrolet' vin="1234567890" stereo='Alpine' airconditioning='notworking'>Volt</model>
        <model id='Dodge' vin="3456789012" airconditioning='working'>Durango</model>
        <model id='Mercedes' vin="4567890123" airconditioning='none'>S150</model>
        <model id='BMW'>M350</model>
        <model id='Volkswagen' vin="5678901234" stereo='Sony'>Beetle</model>
        <model id='Honda' vin="6789012345" airconditioning="blowsicecubes">Accord</model>
</whatever>

在本例中,我希望找到model id='Volkswagen'并将stereo='Sony'更改为'Blaupunkt'。在

如果我使用ElementTree来搜索属性'stereo',它会出错,因为文件顶部的元素中不包含'stereo'。在

任何帮助或提示将不胜感激。在


Tags: 文件id元素编辑model序列xml文件类型
1条回答
网友
1楼 · 发布于 2024-10-01 07:12:28

使用简单的XPath表达式来查找正确的模型:

volkswagen = tree.find('.//model[@id="Volkswagen"]')

然后只需调整stereo属性:

^{pr2}$

您还可以搜索具有stereo属性的model元素:

models_with_stereos = tree.findall('.//model[@stereo]')

然后进一步过滤这些元素。在

如果您切换到使用^{}(elementtreeapi的另一种实现),您仍然可以使用更复杂的XPath表达式,包括仅使用id="Volkswagen"stereo属性匹配model元素。在

相关问题 更多 >