我有以下XML文件,但是我只挑选了我想要更改的部分。我想改变“假”的文字。真的'并写回相同的文件名。我已经搜索并阅读了几个主题,我得到的最接近的代码是下面的代码,但它没有按照我想要的那样做。
这是文件:
<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>
答案 0 :(得分:2)
您的选择器表达式不是有效的XPath表达式。使用[]
表示过滤器属性谓词,并使用@
作为属性,例如:
tree = et.parse('path to settings.xml')
root = tree.getroot()
xpath = 'setting[@id="HomeMenuNoWeatherButton" and @type="bool"]'
root.find(xpath).text = 'true'
答案 1 :(得分:-1)
而不是使用:
tree.find('settings/setting id="HomeMenuNoWeatherButton" type="bool"').text = 'true'
使用:
tree.find('settings/setting id="HomeMenuNoWeatherButton" type="bool"').text.set('true')