Data.xml
<collection shelf="New Arrivals"> <movie title="Enemy Behind"> <type>War, Thriller</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>Talk about a US-Japan war</description> </movie> <movie title="Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>A schientific fiction</description> </movie> <movie title="Trigun"> <type>Anime, Action</type> <format>DVD</format> <episodes>4</episodes> <rating>PG</rating> <stars>10</stars> <description>Vash the Stampede!</description> </movie> <movie title="Ishtar"> <type>Comedy</type> <format>VHS</format> <rating>PG</rating> <stars>2</stars> <description>Viewable boredom</description> </movie> </collection>
XML.py
#!/usr/bin/python # -*- coding: UTF-8 -*- from xml.dom.minidom import parse import xml.dom.minidom class MovieHandler( ): def __init__(self): self.CurrentData = "" self.type = "" self.format = "" self.year = "" self.rating = "" self.stars = "" self.description = "" if ( __name__ == "__main__"): # 使用minidom解析器打开 XML 文档 DOMTree = xml.dom.minidom.parse("data.xml") collection = DOMTree.documentElement if collection.hasAttribute("shelf"): print ("Root element : %s" % collection.getAttribute("shelf")) # 在集合中获取所有电影 movies = collection.getElementsByTagName("movie") # 打印每部电影的详细信息 for movie in movies: print ("*****Movie*****") if movie.hasAttribute("title"): print ("Title: %s" % movie.getAttribute("title")) type = movie.getElementsByTagName('type')[0] print ("Type: %s" % type.childNodes[0].data) format = movie.getElementsByTagName('format')[0] print ("Format: %s" % format.childNodes[0].data) rating = movie.getElementsByTagName('rating')[0] print ("Rating: %s" % rating.childNodes[0].data) description = movie.getElementsByTagName('description')[0] print ("Description: %s" % description.childNodes[0].data)
自己的测试样例
#!/usr/bin/python # -*- coding: UTF-8 -*- from xml.dom.minidom import parse import xml.dom.minidom import json,os #1-1读取基本信息 def Read_ConfigBase(xmlpath): # 1------打开 XML 文档 DOMTree = xml.dom.minidom.parse(xmlpath) root = DOMTree.documentElement #if root.hasAttribute("shelf"): #print ("Root element : %s" % root.getAttribute("shelf")) # 2------在集合中获取所有主节点 ConfigIinfos = root.getElementsByTagName("ConfigIinfo") # 3------- 在主节点中获取分节点 for ConfigIinfo in ConfigIinfos: #3-1--------获取主节点的 title 属性 #if ConfigIinfo.hasAttribute("title"): #print ("Title: %s" % ConfigIinfo.getAttribute("title")) #3-2--------获取主节点下的分节点 Tml_ID = ConfigIinfo.getElementsByTagName('Tml_ID')[0] #print ("Tml_ID: %s" % Tml_ID.childNodes[0].data) Tml_ID=Tml_ID.childNodes[0].data Tml_IP = ConfigIinfo.getElementsByTagName('Tml_IP')[0] #print ("Tml_IP: %s" % Tml_IP.childNodes[0].data) Tml_IP=Tml_IP.childNodes[0].data Addr_ID = ConfigIinfo.getElementsByTagName('Addr_ID')[0] #print ("Addr_ID: %s" % Addr_ID.childNodes[0].data) Addr_ID=Addr_ID.childNodes[0].data CAM_List = ConfigIinfo.getElementsByTagName('CAM_List')[0] #print ("CAM_List: %s" % CAM_List.childNodes[0].data) CAM_List=CAM_List.childNodes[0].data CAM_List_ip = ConfigIinfo.getElementsByTagName('CAM_List_ip')[0] #print ("CAM_List: %s" % CAM_List.childNodes[0].data) CAM_List_ip=CAM_List_ip.childNodes[0].data LisenServer_ip = ConfigIinfo.getElementsByTagName('LisenServer_ip')[0] #print ("LisenServer_ip: %s" % LisenServer_ip.childNodes[0].data) LisenServer_ip=LisenServer_ip.childNodes[0].data LisenServer_port = ConfigIinfo.getElementsByTagName('LisenServer_port')[0] #print ("LisenServer_port: %s" % LisenServer_port.childNodes[0].data) LisenServer_port=LisenServer_port.childNodes[0].data ParkSever_ip = ConfigIinfo.getElementsByTagName('ParkSever_ip')[0] #print ("ParkSever_ip: %s" % ParkSever_ip.childNodes[0].data) ParkSever_ip=ParkSever_ip.childNodes[0].data ParkSever_port = ConfigIinfo.getElementsByTagName('ParkSever_port')[0] #print ("ParkSever_port: %s" % ParkSever_port.childNodes[0].data) ParkSever_port=ParkSever_port.childNodes[0].data ParkPaySever_ip = ConfigIinfo.getElementsByTagName('ParkPaySever_ip')[0] #print ("ParkPaySever_ip: %s" % ParkPaySever_ip.childNodes[0].data) ParkPaySever_ip=ParkPaySever_ip.childNodes[0].data ParkPaySever_port = ConfigIinfo.getElementsByTagName('ParkPaySever_port')[0] #print ("ParkPaySever_port: %s" % ParkPaySever_port.childNodes[0].data) ParkPaySever_port=ParkPaySever_port.childNodes[0].data #数据整理成json configMsg = { 'Tml_ID':Tml_ID, 'Tml_IP':Tml_IP, 'Addr_ID':Addr_ID, "CAM_List":CAM_List, "CAM_List_ip":CAM_List_ip, "LisenServer_ip":LisenServer_ip, "LisenServer_port":LisenServer_port, "ParkSever_ip":ParkSever_ip, "ParkSever_port":ParkSever_port, "ParkPaySever_ip":ParkPaySever_ip, "ParkPaySever_port":ParkPaySever_port, 'Tml_Addr_AllNum':"", 'Tml_Addr_SpareNum':0, 'Tml_Addr_CarAllList':"", 'Tml_Addr_CarSpareList':0, } #发送数据转化成json json_SendData = json.dumps(configMsg) return json_SendData #1-2读取保存车位文件的xml文件路径 def Read_ConfigCarInfo(xmlpath): # 1------打开 XML 文档 DOMTree = xml.dom.minidom.parse(xmlpath) root = DOMTree.documentElement # 2------在集合中获取所有主节点 CarLists = root.getElementsByTagName("CarList") # 3------- 在主节点中获取分节点 for CarList in CarLists: #3-2--------获取主节点下的分节点 CarListPath=[] carxmlNames = CarList.getElementsByTagName('carxmlName') for carxmlName in carxmlNames: carxmlName= carxmlName.childNodes[0].data CarListPath.append(carxmlName) #print ("车位文件: %s" % carxmlName) return CarListPath #1-3获取每一个文件中车位信息-总数目和编号 ''' 输入 carxmlNames 文件名列表 输出 carParkId_arrays 所有文件中车位的总和 ''' def ReadCarXmlGetParkID(carxmlNames): carParkId_arrays=[] #print(carxmlNames) for path_i in carxmlNames: #print(path_i) # 1------打开 XML 文档 DOMTree = xml.dom.minidom.parse(path_i) root = DOMTree.documentElement # 2------在集合中获取所有主节点 car_objects = root.getElementsByTagName("object") for car_object in car_objects: name = car_object.getElementsByTagName('name')[0] name = name.childNodes[0].data #print(path_i,"name: %s" % name) #剔除重复的车位信息 if len(carParkId_arrays) ==0: carParkId_arrays.append(name) isHave=0 for i in carParkId_arrays: if i==name: isHave=1 break if isHave==0: carParkId_arrays.append(name) #carParkId_arrays.append(name) #car_info=(path_i,name) return carParkId_arrays #1-4读取相机参数文件信息 def Read_ImgConfig(xmlpath): # 1------打开 XML 文档 DOMTree = xml.dom.minidom.parse(xmlpath) root = DOMTree.documentElement # 2------在集合中获取所有主节点 ImgConfig = root.getElementsByTagName("ImgConfig")[0] CarParkImg_High = ImgConfig.getElementsByTagName('CarParkImg_High')[0] CarParkImg_High= CarParkImg_High.childNodes[0].data #print(CarParkImg_High) CarParkImg_With = ImgConfig.getElementsByTagName('CarParkImg_With')[0] CarParkImg_With= CarParkImg_With.childNodes[0].data CamImg_High = ImgConfig.getElementsByTagName('CamImg_High')[0] CamImg_High= CamImg_High.childNodes[0].data CamImg_With = ImgConfig.getElementsByTagName('CamImg_With')[0] CamImg_With= CamImg_With.childNodes[0].data CamAdmin = ImgConfig.getElementsByTagName('CamAdmin')[0] CamAdmin= CamAdmin.childNodes[0].data CamPwd = ImgConfig.getElementsByTagName('CamPwd')[0] CamPwd = CamPwd.childNodes[0].data #数据整理成json configMsg = { 'CamAdmin':CamAdmin, 'CamPwd':CamPwd, 'CarParkImg_High':CarParkImg_High, 'CarParkImg_With':CarParkImg_With, 'CamImg_High':CamImg_High, "CamImg_With":CamImg_With } json_Data = json.dumps(configMsg) return json_Data #1-4修改参数文件信息 ''' xmlpath xml文件路径 change_1Node 主节点 change_2Node 次节点 change_msg 要修改的内容 例子: <ImgConfig title="相机参数"> <CamAdmin title="相机账号">xxxx</CamAdmin> <CamPwd title="相机密码"> fhy145145 </CamPwd> </ImgConfig> Change_Config{"路径","ImgConfig","CamAdmin","newpwd"} ''' def Change_Config(xmlpath,change_1Node,change_2Node,change_msg): # 1------打开 XML 文档 DOMTree = xml.dom.minidom.parse(xmlpath) root = DOMTree.documentElement # 2------在集合中获取所有主节点 try: change_1Node = root.getElementsByTagName(change_1Node)[0] change_2Node = change_1Node.getElementsByTagName(change_2Node)[0] change_old= change_2Node.childNodes[0].data change_2Node.childNodes[0].data=change_msg print("修改前数据",change_old,"修改后新数据",change_msg) #将修改后的xml文件保存 with open(os.path.join( xmlpath), 'w',encoding='utf-8') as fh: DOMTree.writexml(fh) print('写入name/pose OK!') except: print('修改失败!,请检查修改字段是否正确') ''' if ( __name__ == "__main__"): xmlpath="cardata/config.xml" #----------------1读取基本信息----------------- json_BaseData=Read_ConfigBase(xmlpath) json_BaseData = json.loads(json_BaseData) #print("基本信息",json_BaseData) print(json_BaseData.get("Tml_ID")) print(json_BaseData.get("Tml_IP")) print(json_BaseData.get("Addr_ID")) CAM_List=json_BaseData.get("CAM_List").split(",") CAM_List_ip=json_BaseData.get("CAM_List_ip").split(",") for i in range(len(CAM_List)): print("相机ID",CAM_List[i],"相机IP",CAM_List_ip[i]) print(json_BaseData.get("LisenServer_ip")) print(json_BaseData.get("LisenServer_port")) print(json_BaseData.get("ParkSever_ip")) print(json_BaseData.get("ParkSever_port")) print(json_BaseData.get("ParkPaySever_ip")) print(json_BaseData.get("ParkPaySever_port")) #----------------2-1读取车位信息文件地址------------- carxmlNames=Read_ConfigCarInfo(xmlpath) print("保存车位的文件名列表:",carxmlNames) #-----------------2-2读取车位总数和ID---------------- carParkId_arrays=ReadCarXmlGetParkID(carxmlNames) print("车位总数目:",len(carParkId_arrays)) print("车位ID列表-不重复:",carParkId_arrays) #---------------2-3读取相机基本信息------------------ json_CamData=Read_ImgConfig(xmlpath) json_CamData=json.loads(json_CamData) print(json_CamData.get("CamAdmin")) print(json_CamData.get("CamPwd")) print(json_CamData.get("CarParkImg_High")) print(json_CamData.get("CarParkImg_With")) print(json_CamData.get("CamImg_High")) print(json_CamData.get("CamImg_With")) #----------------3 修改xml指定参数,重新保存覆盖(原文件-xmlpath)或者新文件------ Change_Config(xmlpath,"ImgConfig","CamAdmin","admin") Change_Config(xmlpath,"ConfigIinfo","Addr_ID","zoom_A002") '''