如何使用Python查找,读取和替换XML文件中的值

时间:2017-11-22 16:26:40

标签: python xml

这是我的示例XML文件:

<CATALOG>
<CD>
<DATA key="title">Hide your heart</DATA>
<DATA key="artist">Bonnie Tyler</DATA>
<DATA key="country">UK</DATA>
<DATA key="company">CBS Records</DATA>
<DATA key="price">9.90</DATA>
<DATA key="year">1988</DATA>
<DATA key="times">1</DATA>
</CD>
</CATALOG>

我想用关键字“times”更改标签数据中的值,并在每次从终端启动脚本时为其添加1。

我首先尝试用以下内容阅读元素:

import xml.etree.ElementTree
e = xml.etree.ElementTree.parse('test.xml').getroot()

for atype in e.findall('data'):
    times=(atype.get('times'))

但是我已经卡住了,因为它不起作用。如果我尝试打印“时代” 我没有收到终端的输出。

我的想法是阅读它,使用函数添加到此值1并将其替换为总和(在这种情况下为2)。并保存修改后的XML文件。

这应该很容易,但我无法理解。

EDIT 我必须更好地阅读文档,我尝试过:

import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()

times = root[0][7].text

newTimes = int(times) + 1

times = newTimes

tree.write('test.xml')

它正确读取了值,添加1但是如果我尝试写入文件则会出错。我做错了什么?

编辑2
我找到了解决方案,请阅读下面我自己的答案。

2 个答案:

答案 0 :(得分:0)

非常简单:

>>> e.findall('CD')
[<Element 'CD' at 0x7fc0a22c1778>]
>>> e.findall('DATA')
[]

错误的骇人听闻......

答案 1 :(得分:0)

我找到了解决方案,我只需先读取值,将其转换为整数,加1并替换值再将其转换为字符串:

import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()

newTimes = int(root[0][7].text) + 1
root[1][6].text = str(newTimes)

tree.write('test.xml')

就是这样。