分享

用QTP调用外部vbs读写XML的例子

 hueagle 2011-03-08

    原文作者:songfun 原文地址: http://bbs./thread-76590-1-1.html

    目前,企业中对XML的应用越来越广泛,作为自动化测试的测试工程师,也应该掌握XML的读写操作。
以下我使用XML DOM技术演示一个例子,用以读取XML指定节点的节点内容值。
    读取函数原型 GetXml strXmlPath,nodeName .这个函数的第一个参数表示xml文件所在路径,第二个参数表示希望获取到的xml节点名,请结合下列例子看
    首先,新建一个vbs文件(取个名字叫readXml.vbs),输入代码:


'==================================================================
'   Author  : songfun '  Description :  Read XML
'==================================================================
Dim strXML GetXml "c:\search.xml","TestResult"  
'这个函数的第一个参数表示xml文件所在路径,第二个参数表示希望获取到的xml节点名,请结合下列例子看
MsgBox strXML
Function GetXml (ByVal strXmlFilePath,ByVal xmlNodeName)
        Dim xmlDoc,xmlRoot
Set xmlDoc = CreateObject("Microsoft.XMLDOM") '创建XML DOM对象
        xmlDoc.async = False  '控制加载模式为同步模式(xml树加载完毕后再执行后续代码)
        xmlDoc.load strXmlFilePath       '载入xml文件
        If xmlDoc.parseError.errorCode <> 0 Then
                MsgBox "XML文件格式不对,原因是:" & Chr(13) &  xmlDoc.parseError.reason
                Exit Function               
        End If
        Set xmlRoot = xmlDoc.documentElement       
        xmlRecursion xmlRoot,xmlNodeName       '调用xml递归函数传入指定的根和节点名       
        GetXml = True 'xmlRecursion (xmlRoot) End Function Function xmlRecursion(byval xmlNode,byval strNodeName)
        If xmlNode.nodeName = strNodeName And xmlNode.hasChildNodes Then
                If  xmlNode.childNodes.item(0).nodeName = "#text" Then
                        strXML = strXML & xmlNode.nodeName & ":" & xmlNode.childNodes.item(0).nodeValue & Chr(13)                                               
                End If               
        End If                       
        If xmlNode.hasChildNodes Then
                For Each childNodeItem In xmlNode.ChildNodes
                        If childNodeItem.hasChildNodes Then
                                xmlRecursion childNodeItem,strNodeName                               
                        End If                       
                Next
        End If       
End Function

    接着,自己构造一个xml文件(取个名字叫search.xml),如:

<?xml version="1.0" encoding="GB2312"?>
<ROOT>
<TestCase>
<TestNumberOne>1</TestNumberOne>
<TestNumberTwo>2</TestNumberTwo>
<TestNumberThree>+</TestNumberThree>
<TestResult>3</TestResult>
</TestCase>
<TestCase>
<TestNumberOne>3</TestNumberOne>
<TestNumberTwo>2</TestNumberTwo>
<TestNumberThree>-</TestNumberThree>
<TestResult>1</TestResult>
</TestCase>
<TestCase>
<TestNumberOne>3</TestNumberOne>
<TestNumberTwo>7</TestNumberTwo>
<TestNumberThree>*</TestNumberThree>
<TestResult>21</TestResult>
</TestCase>
<TestCase>
<TestNumberOne>2</TestNumberOne>
<TestNumberTwo>5</TestNumberTwo>
<TestNumberThree>/</TestNumberThree>
<TestResult>0.4</TestResult>
</TestCase>       
</ROOT>

很容易可以看出,这个文件存储的是书店存书的信息。
xml是一种半结构化的数据形势,现在随着web2.0的深入发展,他得到了越来越多的关注,越来越多的技术都围绕着他开展,新一代的经典数据库都宣称支持xml,还有很火热的ajax技术,等等。今天,我写的程序是用c#去解析xml文件,在写程序的过程中,了解到以下一些信息:
1. xml文件的第一行,是说明信息,但是他也是xml的第一个子节点,同时他不具有子节点,和属性。这在写解析程序的时候很重要。
2. 一开始,我想象的写一个一本万利的xml管理类 ,显然是不可能的。因为,每一个xml文件的结构都不一样,而且如果应用该xml文件也不经相同。因此,我们只能够熟练掌握xml处理的两种基本模式,流模式和文档对象模式,然后在每一次应用的基础上重新编写代码,对其进行解析。
3. xml是大小写敏感的;
4. 更多的还有待发现...

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多