QTP讀取xml

  目前,企業中對XML的應用愈來愈普遍,做爲自動化測試的測試工程師,也應該掌握XML的讀寫操做。
  如下我使用XML DOM技術演示一個例子,用以讀取XML指定節點的節點內容值。
  讀取函數原型 GetXml strXmlPath,nodeName
  這個函數的第一個參數表示xml文件所在路徑,第二個參數表示但願獲取到的xml節點名,請結合下列例子看
  首先,新建一個vbs文件(取個名字叫readXml.vbs),輸入代碼:
Dim strXMLjavascript

  GetXml "c:search.xml","TestResult"  '這個函數的第一個參數表示xml文件所在路徑,第二個參數表示但願獲取到的xml節點名,請結合下列例子看
MsgBox strXMLhtml

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 Functionjava

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 Ifnode

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 Subweb


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

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函數

轉載:http://www.51testing.com/html/62/n-76062.html測試

相關文章
相關標籤/搜索