忙着写培训文档,今天只解决了read xml via pathon,明天七点起床去公司把export module解决完,开始集成计算模块,记录一下今天的completed task:
1. read xml via ElementTree
<?xml version="1.0" encoding="utf-8"?>
<TestTrackData>
<Server>http://10.7.88.11/ttsoapcgi.wsdl</Server>
<User>administrator</User>
<Password></Password>
<ExportFile>D:\TTDefectExport.xml</ExportFile>
</TestTrackData>
使用python编写代码:
from xml.etree import ElementTree
def ReadXMLNode(configFile, nodePath):
root = ElementTree()
root = ElementTree.Parse(configFile)
node = root.find(nodePath)
return node.text
if __name__ == '__main__':
config = r"D:\Config.xml"
serverPath = ReadXMLNode(config, "Server")
userPath = ReadXMLNode(config, "User")
pswPath = ReadXMLNode(config, "Password")
exportPath = ReadXMLNode(config, "ExportFile")
尝试下dom来操作xml:create xml file via dom
def ReadXMLNode(configFile, nodePath): tree = ElementTree() root = tree.Parse(configFile) node = root.find(nodePath) return node.text if __name__ == '__main__': config = r"D:\Config.xml" server = ReadXMLNode(config, "Server") user = ReadXMLNode(config, "User") psw = ReadXMLNode(config, "Password") if psw == None: psw = '' export = ReadXMLNode(config, "ExportFile") #create a connection to TT server server = suds.client.Client(server) doc = Document() root = doc.createElement("TestTrackData") #login cookie = server.service.DatabaseLogon(database_name, user, psw) try: #fetch all the defect rows = server.service.getRecordListForTable(cookie, "Defect") for record in rows.Records: # fectch specific defect using given defect number defect = server.service.getDefect(cookie, record[0].value, bDownloadAttachments=False) defectNode = doc.createElement("Defect") if defect.__dict__.hasKey("recordid"): recordid = defect.__dict__["recordid"] # recordid recordidNode = doc.createElement("record-id") recordidNodeText = doc.createTextNode(recordid) recordidNode.appendChild(recordidNodeText) defectNode.appendChild(recordidNode) if defect.__dict__.hasKey("summary"): summary = defect.__dict__["summary"] #summary summaryNode = doc.createElement("summary") summaryNodeText = doc.createTextNode(recordid) summaryNode.appendChild(summaryNodeText) defectNode.appendChild(summaryNode) doc.appendChild(root) try: f = open('bookstore.xml','w') content = re.sub(r'(<[^/][^<>]*[^/]>)\s*([^<>]{,40}?)\s*(</[^<>]*>)', r'\1\2\3', doc.toprettyxml(indent = '')) f.write(content) finally: f.close() except: finally: response = server.service.DatabaseLogoff(cookie)
生成的xml可能没法自动换行,可能是以下样子
<catalog> <maxid> 4 </maxid> </catalog>
可以用正则表达式来去掉多余\tcontent = re.sub(r'(<[^/][^<>]*[^/]>)\s*([^<>]{,40}?)\s*(</[^<>]*>)', r'\1\2\3', doc.toprettyxml(indent = ''))