千家信息网

VBScript读取XML文件

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,虽然现今数据大部分都是使用数据库存储,但是停电断网等不可抗拒因素经常中断着automation的进行,这时若这些非业务的配置数据用xml来存储就显得方便很多了,下面是用VBScript脚本读取XML文
千家信息网最后更新 2025年12月02日VBScript读取XML文件

虽然现今数据大部分都是使用数据库存储,但是停电断网等不可抗拒因素经常中断着automation的进行,这时若这些非业务的配置数据用xml来存储就显得方便很多了,下面是用VBScript脚本读取XML文件的实现方法,记录下以作备忘。

1. XML文件的节点信息:

      1    TNSLogon ELOG ASD    asd    1        3    TNSLogon NAV12C2 navdev    navdev    0        5    DirectLogon RTTD devman    devman    0  

2. 判断当前系统的MSXML.dll组件的版本(由于系统中一般会有多个版本,这里就只取最大的版本)

Function iGetMSxmlVersion()    Dim SystemPath, fso, f, fa, fname, iVersion, iMaxVersion    SystemPath =  "C:\Windows\System32" 'system  path    Set fso = CreateObject("Scripting.FileSystemObject")    If fso.FolderExists(SystemPath) Then        Set f = fso.GetFolder(SystemPath)        Set fa = f.Files        iMaxVersion = 0        ' calc the amount of files         For Each fname in fa            If Instr(fname,"msxml")>0 Then                iVersion = Mid(fname.name,6,1)                If IsNumeric(iVersion) Then                    If iMaxVersion < iVersion Then                        iMaxVersion = iVersion                    End If                End If            End If              Next        If iMaxVersion >0 Then            iGetMSxmlVersion = iMaxVersion            Log.Message("The max MSxml version is: " + iMaxVersion)         Else            iGetMSxmlVersion = 0            Log.Error("The current system not exist MSxml module.")         End If          End IfEnd Function

3. 读取xml文件函数:

Function sGetDataFromXML(sXmlPath, sRoot, sNode, iDataID, sColumn)     Dim xmlVersion    xmlVersion = iGetMSxmlVersion    If sXmlPath <> "" and  sRoot <> "" and sNode <> "" and iDataID <>"" and sColumn <> "" Then        If xmlVersion <> 0 Then            ' Create COM object            Set Doc = Sys.OleObject("Msxml2.DOMDocument."+ xmlVersion +".0")            ' you can also use the following method to create XMLDOM object            'Set Doc = CreateObject("Microsoft.XMLDOM")            Doc.async = False            ' Load data from a file            ' We use the file created earlier            Call Doc.load(sXmlPath)            ' Report an error, if, for instance, the markup or file structure is invalid             If Doc.parseError.errorCode <> 0 Then                s = "Reason:" + Chr(9) + Doc.parseError.reason + _                    "Line:" + Chr(9) + CStr(Doc.parseError.line) + Chr(13) + Chr(10) + _                    "Pos:" + Chr(9) + CStr(Doc.parseError.linePos) + Chr(13) + Chr(10) + _                 "Source:" + Chr(9) + Doc.parseError.srcText                ' Post an error to the log and exit                Call Log.Error("Cannot parse the document.", s)                 Exit Function            End If            ' Use an XPath expression to obtain a list of "control" nodes             Set Nodes = Doc.selectNodes("/" + sRoot + "/" + sNode + "[DataID=" + CStr(iDataID) + "]/" + sColumn)            If Not(Nodes.item(0) is Nothing) Then                Call Log.Message("Data from XML: " + Nodes.item(0).text)                 sGetTestDataFromXML = Nodes.item(0).text            Else                Log.Error("Read XML nodes occur errors.")                Exit Function            End If            Set Nodes = Nothing            Set Doc = Nothing        Else            Exit Function        End If    Else        Log.Error("Function sGetTestDataFromXML() occur incorrect parameters.")        Exit Function    End IfEnd Function

4. TestComplete中测试脚本及log输出:

Sub Test    Dim strXmlPath, strTNSName, strUserame, strPassword    strXmlPath=Project.Path + "Data\TC_TNSInfo.xml"    log.Message(strXmlPath)    If aqFile.Exists(strXmlPath) Then        strTNSName = sGetTestDataFromXML(strXmlPath, "TC_TestLogon", "TNSLogon", 3, "I_TNSName")        strUserame = sGetTestDataFromXML(strXmlPath, "TC_TestLogon", "TNSLogon", 3, "I_Username")        strPassword = sGetTestDataFromXML(strXmlPath, "TC_TestLogon", "TNSLogon", 3, "I_Password")        log.Message("TNSName is :"+strTNSName)        log.Message("Username is :"+strUserame)        log.Message("Password is :"+strPassword)    End IfEnd Sub

0