使用Python

时间:2018-02-02 16:57:41

标签: python xml

我有以下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>

2 个答案:

答案 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')