QTP操作xml文件的方法

  
目前,企业中对XML的应用越来越广泛,作为自动化测试的测试工程师,也应该掌握XML的读写操作。
以下我使用XML DOM技术演示一个例子,用以读取XML指定节点的节点内容值。
读取函数原型 GetXml strXmlPath,nodeName
这个函数的第一个参数表示xml文件所在路径,第二个参数表示希望获取到的xml节点名,请结合下列例子看
首先,新建一个vbs文件(取个名字叫readXml.vbs),输入代码:
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
 
问题:
haschildnodes()这个方法好奇怪,明明已经没有子节点了,却仍然返回true,
比如<TestResult>1</TestResult>这个节点,它的childNodes.item(0).nodeName竟然是“#text”,但是根据例子来看TestResult已经没有子节点了阿
回答:
因为在xml有一个特殊的“子节点”——文本节点。比如 <TestResult>100</TestResult>
这个节点TestResult下并不是没有子节点,而是有一个文本节点,这个节点的nodeName就是“#text”,而nodeValue是100.如果是 <TestResult/> 这种节点的话,那么用hasChildNodes则返回False
 
遍历xml的代码:
Option   Explicit
Dim  xmlDoc,myErr,strXML
Set  xmlDoc  =   CreateObject ( " Microsoft.XMLDOM " )
xmlDoc.async 
=   False    
xmlDoc.load 
" c:calc1.xml "
If  xmlDoc.parseError.errorCode  <>   0   Then    
   
Set  myErr  =  xmlDoc.parseError
   
MsgBox ( " XML Loads Failed.  "   &  myErr.reason)
Else
        
Set  rootNode  =  xmlDoc.documentElement 
        
Call  rTravel(rootNode)
        
MsgBox  strXML 
End   If

Sub  rTravel (rNode)
        
Dim  blnTwo,intTestCase,
        blnTwo 
=   False
        iLen 
=  rNode.childNodes.length
        
If  iLen  >   0   Then
                
For  i  =   0   To  rNode.childNodes.length  - 1  
                        
Set  child  =  rNode.childNodes.item(i)
                        
Call  rTravel(child)                        
                        childtext 
=  child.nodeValue                        
                        strXML 
=  strXML  &  childtext  &   chr ( 13 )
                
Next
        
Else
                
Exit   Sub                 
        
End   If  
End Sub

方法二:
Option   Explicit
Dim  xmlDoc,myErr,strXML

Set  xmlDoc  =   CreateObject ( " Microsoft.XMLDOM " )
xmlDoc.async 
=   False    
xmlDoc.load 
" c:calc1.xml "
If  xmlDoc.parseError.errorCode  <>   0   Then    
   
Set  myErr  =  xmlDoc.parseError
   
MsgBox ( " XML Loads Failed.  "   &  myErr.reason)
Else
        
Set  rootNode  =  xmlDoc.documentElement 
        
Call  rTravel(rootNode)
        
MsgBox  strXML 
End   If
Sub  rTravel (rNode)
        
Dim  blnTwo,intTestCase,
        blnTwo 
=   False
        iLen 
=  rNode.childNodes.length
        
If  iLen  >   0   Then
                
For  i  =   0   To  rNode.childNodes.length  - 1  
                        
Set  child  =  rNode.childNodes.item(i)
                        
Call  rTravel(child)                        
                        childtext 
=  child.nodeValue                        
                        strXML 
=  strXML  &  childtext  &   chr ( 13 )
                
Next
        
Else
                
Exit   Sub                 
        
End   If  
End Sub
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值