Python之xml读写

遇到问题xml文件读写,没有子节点需要新建ChildNode。

 1 # -*- coding: utf-8 -*-
 2 import os
 3 import shutil
 4 import  xml.dom.minidom
 5 
 6 def correctxml(srcdir,finddir):
 7      num = 0  
 8      list = os.listdir(srcdir)
 9      for i in range(0,len(list)):
10           if list[i][-3:] == 'xml':
11                #print(list[i]) #  0863091.res
12                resdir = os.path.join(srcdir,list[i])
13                # C:\Users\Administrator\Desktop\两类错误图像\有效期限\答案错误\0863091.res
14                restree = xml.dom.minidom.parse(resdir)
15                res = restree.documentElement
16                #value1 签发机构
17                #resvalue1 = res.getElementsByTagName('field')[1].getAttribute('value')
18 
19                resvalue1 = res.getElementsByTagName('Field')[6].childNodes[0].nodeValue
20                #value2 有效期限 .childNodes[0]
21                #resvalue2 = res.getElementsByTagName('field')[2].getAttribute('value')             
22                #value3 签发日期
23                #resvalue3 = res.getElementsByTagName('field')[3].getAttribute('value')
24                #value4 有效期至
25                #resvalue4 = res.getElementsByTagName('field')[4].getAttribute('value')
26                if len(list[i]) == 11:
27                     findpath = finddir + '\' + list[i][:-7]
28                else:
29                     findpath = finddir + '\0' + list[i][:-7]
30                #findpath = finddir + '\0' + list[i][:-7]
31                findlist = os.listdir(findpath)
32                
33                for j in range(0,len(findlist)):
34                     if list[i][:-4] == findlist[j][:-4]:
35                          xmldir = os.path.join(findpath,findlist[j])
36                          #print(xmldir)
37                          xmltree = xml.dom.minidom.parse(xmldir)
38                          solutionxml = xmltree.documentElement
39                          if solutionxml.getElementsByTagName('Field')[6].hasChildNodes():
40                               solutionxml.getElementsByTagName('Field')[6].childNodes[0].nodeValue = resvalue1 # 存在节点直接赋值
41                          else:
42                               solutionxml.getElementsByTagName('Field')[6].appendChild(xmltree.createTextNode(resvalue1)) # 不存在节点新建节点
43                          element = solutionxml.getElementsByTagName('Field')
44                          print(element)
45                          #solutionxml.getElementsByTagName('Field')[2].childNodes[0].nodeValue = resvalue2
46                          #solutionxml.getElementsByTagName('Field')[3].childNodes[0].nodeValue = resvalue3
47                          #solutionxml.getElementsByTagName('Field')[4].childNodes[0].nodeValue = resvalue4
48                          
49                          with open(xmldir,'w', encoding='UTF-8') as fh:
50                               xmltree.writexml(fh,newl='
',encoding='UTF-8')
51                               num = num + 1  #  计数
52                          file1 = open(xmldir, 'r', encoding='utf-8') # 要去掉空行的文件
53                          file2 = open('C:\Users\WT\Desktop\1.xml', 'w', encoding='utf-8') # 生成没有空行的文件
54                          for line in file1.readlines():
55                               line = line.lstrip("
")
56                               file2.write(line)
57                          file1 = open(xmldir, 'w', encoding='utf-8')
58                          file2 = open('C:\Users\WT\Desktop\1.xml', 'r', encoding='utf-8')
59                          for line in file2.readlines():
60                               file1.write(line)
61                          print('修改了'+ xmldir)
62                          
63      print(num)
64 
65 
66 correctxml('C:\Users\WT\Desktop\tmp',
67            'D:\标准样本库v2\02 样本库\02 标准答案\06 机动车行驶证\03 手机拍照\01 自由拍照')
View Code

参考博客:https://blog.csdn.net/kongsuhongbaby/article/details/84869838

原文地址:https://www.cnblogs.com/juluwangshier/p/12059661.html