所以从2天开始我试图在我的xml文件中添加元素,但是我仍然有问题,如果有人可以帮助我!!
这是我的代码:
tree = etree.parse('Matching_Result.xml')
root = tree.getroot()
xmlstr = minidom.parseString(ET.tostring(root)).toprettyxml(indent=" ",newl="")
for mot in root.findall('mot'):
name = mot.get('id')
rank = mot.find('val').text
print name , rank
if name.encode('utf-8') == 'ابْتهَج':
val = SubElement(mot, 'val')
newval = 'ابتهج'
val.text = newval.decode('utf-8')
with open("Matching_Result.xml", "w") as f:
f.write(xmlstr.encode('utf-8'))
我的xml文件是这样的:
<mathing>
<mot id="شَعر" >
<val>شَعُر</val>
</mot>
<mot id="ابْتهَج">
<val></val>
</mot>
</matching>
所以我应该有一个xml文件,如:
<mathing>
<mot id="شَعر" >
<val>شَعُر</val>
</mot>
<mot id="ابْتهَج">
<val>ابتهج</val>
</mot>
</matching>
但在我的代码中,我的代码没有改变我的xml输出文件!!
答案 0 :(得分:0)
我可以看到您的代码和数据存在一些问题。
一个。 xml文件开头的标记mathing
错误
湾etree没有方法解析,它应该是ET.parse('Matching_Result.xml)
C。我也可以在没有minidom的情况下做到这一点。
此代码适用于我,添加编码解码并检查。
from xml.etree import ElementTree as ET
tree = ET.parse('Matching_Result.xml')
root = tree.getroot()
for mot in root.findall('mot'):
name = mot.get('id')
rank = mot.find('val').text
print name , rank
if name == 'abc':
val= mot.find('val')
val.text = 'new_val'
tree.write('Matching_Result.xml')
初始Matching_Result.xml
:
<matching>
<mot id="test">
<val>testing</val>
</mot>
<mot id="abc">
<val></val>
</mot>
</matching>
最终Matching_Result.xml
:
<matching>
<mot id="test">
<val>testing</val>
</mot>
<mot id="abc">
<val>new_val</val>
</mot>
</matching>