~.qTp.~ 好久不见~~~ Hey dude @ Long time no see ·^o^·
QTP操作xml文件的方法(zt)
上一篇 /
下一篇 2010-03-17 16:18:19
/ 个人分类:.qTp. 为卿加冕
目前,企业中对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 IfSub 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,strXMLSet 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 |
< SCRIPT.
收藏
举报
TAG: