VBScript读取XML文件

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

1. XML文件的节点信息:

<?xml version="1.0"?>
<TC_TestLogon>
  <TNSLogon>
    <DataID>1</DataID>
    <I_Type>TNSLogon</I_Type>
 <I_TNSName>ELOG</I_TNSName>
 <I_Username>ASD</I_Username>
    <I_Password>asd</I_Password>
    <I_SavePassword>1</I_SavePassword>
  </TNSLogon>
  <TNSLogon>
    <DataID>3</DataID>
    <I_Type>TNSLogon</I_Type>
 <I_TNSName>NAV12C2</I_TNSName>
 <I_Username>navdev</I_Username>
    <I_Password>navdev</I_Password>
    <I_SavePassword>0</I_SavePassword>
  </TNSLogon>
  <TNSLogon>
    <DataID>5</DataID>
    <I_Type>DirectLogon</I_Type>
 <I_TNSName>RTTD</I_TNSName>
 <I_Username>devman</I_Username>
    <I_Password>devman</I_Password>
    <I_SavePassword>0</I_SavePassword>
  </TNSLogon>
</TC_TestLogon>

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 If
End 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 If
End 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 If
End Sub

时间: 2024-11-08 03:42:00

VBScript读取XML文件的相关文章

C#读取XML文件的基类实现

刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node.Attribute(name)方法,因此,想到结合之前所做的XML操作,完成了一个能够读取XML文件的基类,便于以后的使用. PS:即使再老套的代码,目前也不敢进行优化,一是水平不行,二是不敢. 使用静态扩展类,扩展了几个经常使用的类型,能够方便数据的读写. 操作XML的类,可以直接继承BaseL

Excel开发学习笔记:读取xml文件及csv文件

读取xml文件 有好多种读取xml的方式,xmlDOM比较常见,我使用了另外一种,它以数据流的方式打开文件并读取内容 Imports System.Xml  Dim group As New List(Of String)  Using reader As XmlReader = XmlReader.Create(OpenFileDialog2.FileName)      While reader.ReadToFollowing("group")          reader.Mo

读取XML文件的指定节点的值 并转换为Item

cmb_State_Send.ItemsSource = null; XmlDocument doc = new XmlDocument(); doc.Load("D:\\模板\\WorkstationState_Config.xml"); //加载Xml文件 XmlElement rootElem = doc.DocumentElement; //获取根节点 XmlNode xn = rootElem.SelectSingleNode("//Workstation[@Nam

Java使用相对路径读取xml文件

java使用相对路径读取xml文件 博客分类: java javaXMLJavaWeb 一.xml文件一般的存放位置有三个: 1.放在WEB-INF下: 2.xml文件放在/WEB-INF/classes目录下或classpath的jar包中: 3.放在与解析它的java类同一个包中,不一定是classpath: 二.相对应的两种使用相对路径的读取方法: 方法一:(未验证) 将xml文件放在WEB-INF目录下,然后 程序代码: InputStream is=getServletContext(

C#中常用的几种读取XML文件的方法

XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具.XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用.微软也提供了一系列类库来倒帮助我们在应用程序中存储XML文件. “在程序中访问

C# 读取xml文件忽略xml文件的注释

默认情况下,读取xml文件是不忽略注释的,这样读取带注释的节点会造成异常,那么怎么屏蔽掉这些注释呢? 方案如下: XmlDocument doc = new XmlDocument(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; //xmlFilePath:xml文件路径 XmlReader reader = XmlReader.Create(xmlFilePath,

DataSet - DataTable - DataRow 读取 xml 文件 + 搜索

DataSet ds = XmlHelper.GetDataSetByXml(AppDomain.CurrentDomain.BaseDirectory + "/Config/ConfigName.xml");//取得xml文件 DataTable dt = ds.Tables["table_Name"];//取得xml文件的节点内容 DataRow[] dr = dr = ds.Tables["table_Name"].Select("

利用XPath读取Xml文件

之所以要引入XPath的概念,目的就是为了在匹配XML文档结构树时能够准确地找到某一个节点元素.可以把XPath比作文件管理路径:通过文件管理路 径,可以按照一定的规则查找到所需要的文件:同样,依据XPath所制定的规则,也可以很方便地找到XML结构文档树中的任何一个节点. 不过,由于XPath可应用于不止一个的标准,因此W3C将其独立出来作为XSLT的配套标准颁布,它是XSLT以及我们后面要讲到的XPointer的重要组成部分. 在介绍XPath的匹配规则之前,我们先来看一些有关XPath的基

Asp.Net 读取xml文件中Key的值,并且过滤掉注释内容代码

/// <summary> /// 读取配置文件keys /// </summary> /// <returns></returns> public string _GetKeys() { string filename = Server.MapPath("/") + @"web.config"; XmlDocument xmldoc = new XmlDocument(); XmlReaderSettings set