Python Xml类

#-*- coding:utf-8 -*-  

from xml.dom import minidom, Node 
import codecs
import sys
import os

class XmlUtility:
    # 常用工具类
    #def __init__():
    headNode = "configuration"
    listNode = "section"
    node = "setting"
    rootHead = ''
    hasCreateXml = False
    doc = minidom.Document()
    
    def __init__(self, xmlPath):
        self.xmlFilePath = xmlPath
        
    def CreateDefaultXml(self): 
        #测XML配置文件是否存在   
        if (os.path.exists(self.xmlFilePath)):
            return
        self.rootHead = self.doc.createElement(self.headNode)
        self.doc.appendChild(self.rootHead)
        #self.SaveXml()
        self.hasCreateXml = True
        
    def ReadXml(self,path):
        self.doc = minidom.parse(path)
        st = self.doc.firstChild
        websites = st.childNodes
         
        lstList = []
        for sw in websites:     
            if sw.nodeType == sw.ELEMENT_NODE :
                lsty = []
                attributes = ''
                flag = False
                for attribute in sw.attributes.keys():
                    if(flag == False):
                        attributes += attribute + "|" + sw.getAttribute(attribute)
                    else:
                        attributes += "^" + attribute + "|" + sw.getAttribute(attribute)
                    flag = True
                    ndName = sw.nodeName.replace("\n", "").replace("\t", "")
                    ndValue = sw.firstChild.data.replace("\n", "").replace("\t", "")
                    lsty.append([ndName + "|" + ndValue, attributes])
                for nd in sw.childNodes:            
                    if nd.nodeType == nd.ELEMENT_NODE:
                        attributes = ''
                        flag = False
                        for attribute in nd.attributes.keys():
                            if(flag == False):
                                attributes += attribute + "|" + nd.getAttribute(attribute)
                            else:
                                attributes += "^" + attribute + "|" + nd.getAttribute(attribute)
                            flag = True
                        ndName = nd.nodeName.replace("\n", "").replace("\t", "")
                        ndValue = nd.firstChild.data.replace("\n", "").replace("\t", "")
                        lsty.append([ndName + "|" + ndValue, attributes])
                lstList.append(lsty)
        return lstList

    def InsertXml(self, listValues):
        #self.rootHead = self.doc.createElement(self.headNode)
        #self.doc.appendChild(self.rootHead)
        for i in range(0,len(listValues)):
            ss = listValues[i]
            valuess = ss[0][0].split('|')
            att = ss[0][1].split('^')
            root = self.doc.createElement(valuess[0])
            for k in range(0, len(att)):
                valuess = att[k].split('|')
                root.setAttribute(valuess[0], valuess[1])
            self.rootHead.appendChild(root)
            for j in range(1,len(ss)):
                values = ss[j][0].split('|')
                attributes = ss[j][1].split('^')
                nodes = self.doc.createElement(values[0])
                for k in range(0, len(attributes)):
                    value = attributes[k].split('|')
                    nodes.setAttribute(value[0], value[1]) 
                nodes.appendChild(self.doc.createTextNode(values[1])) 
                root.appendChild(nodes)
        self.SaveXml()

    def SaveXml(self):
        self.doc = minidom.parseString(self.doc.toprettyxml())
        f = file(self.xmlFilePath, 'w')
        writer = codecs.lookup('utf-8')[3](f)
        self.doc.writexml(writer, encoding='utf-8')
        writer.close()

    def SaveXmls(self, docs):
        docs = minidom.parseString(docs.toprettyxml())
        f = file(self.xmlFilePath, 'w')
        writer = codecs.lookup('utf-8')[3](f)
        doc.writexml(writer, encoding='utf-8')
        writer.close()
def forMatList(self, lists):
    values = []
    values.append(["section|","sys|" + lists[0]])
    values.append(["JobID|" + lists[1],"id|JobID"])
    values.append(["JobName|" + lists[2],"id|JobName^value|" + lists[3]])
    values.append(["JobDescription|" + lists[4],"id|JobDescription"])
    values.append(["JobImpact|" + lists[4],"id|JobImpact"])
    return values


p = SendMail()
p.InitXml(filePath)

lists = []

lists.append(p.forMatList(["WebOrder","JOB_OE_OrderFinishToW101"
                          ,"1","True","DSD/101/WEB101订单生成是否正常"]))
lists.append(p.forMatList(["WebOrder","JOB_OE_OrderFinishToW101E"
                          ,"2","True","DSD/101/WEB101订单生成是否正常"]))
lists.append(p.forMatList(["WebOrder","JOB_OE_MCMOrderToOrderFinish"
                          ,"3","True","DSD/101/WEB101订单生成是否正常"]))

if(p.xml.hasCreateXml):
    p.xml.InsertXml(lists)

lists = p.xml.ReadXml(filePath)



原文地址:https://www.cnblogs.com/xsmhero/p/2801266.html