• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
python读写xml

 

 

 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")


'''

  

 

posted on 2021-09-11 11:36  MKT-porter  阅读(122)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3