如何使用SubElement在xml文件中添加元素

时间:2018-01-30 09:50:22

标签: python xml

所以从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输出文件!!

1 个答案:

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