这是我的示例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
我找到了解决方案,请阅读下面我自己的答案。
答案 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')
就是这样。