
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")
'''
浙公网安备 33010602011771号