使用Python动态替换XML中的文本

2024-05-19 07:42:45 发布

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

我有下面的XML文件,这是较长的,但我只挑选了一部分,我想改变。我喜欢将文本从“false”改为“true”,然后写回相同的文件名。我已经搜索和阅读了一些线程和最近我得到的是下面的代码,但它没有做我想要的。你知道吗

文件如下:

<settings>
    <setting id="HomeMenuNoWeatherButton" type="bool">false</setting>
    <setting id="HomeMenuNoPicturesButton" type="bool">false</setting>
    <setting id="HomeMenuNoMusicButton" type="bool">false</setting>
</settings>

我在其中一个线程中尝试的代码:

from xml.etree import ElementTree as et
tree = et.parse('path to settings.xml')
tree.find('settings/setting id="HomeMenuNoWeatherButton" type="bool"').text = 'true'
tree.find('settings/setting id="HomeMenuNoPicturesButton" type="bool"').text = 'true'
tree.find('settings/setting id="HomeMenuNoMusicButton" type="bool"').text = 'true'
tree.write('path to settings.xml')

我希望文件是:

<settings>
    <setting id="HomeMenuNoWeatherButton" type="bool">true</setting>
    <setting id="HomeMenuNoPicturesButton" type="bool">true</setting>
    <setting id="HomeMenuNoMusicButton" type="bool">true</setting>
</settings>

Tags: 文件textidfalsetruetreesettingstype
2条回答

选择器表达式不是有效的XPath表达式。使用[]作为筛选器谓词,使用@作为属性,例如:

tree = et.parse('path to settings.xml')
root = tree.getroot()
xpath = 'setting[@id="HomeMenuNoWeatherButton" and @type="bool"]'
root.find(xpath).text = 'true'

而不是使用:

tree.find('settings/setting id="HomeMenuNoWeatherButton" type="bool"').text = 'true'

用途:

tree.find('settings/setting id="HomeMenuNoWeatherButton" type="bool"').text.set('true')

相关问题 更多 >

    热门问题