csj 发表于 2010-11-17 13:45:15

VBS读取XML问题,请大侠帮忙看一下代码

readConfig("C:\MyFile\Project\024609\024609\Report\Results.xml")

Function readConfig(byval path)
      Set xmlDoc = Nothing
      Set xmlDoc = CreateObject("Msxml2.DOMDocument")
      'loadXML
      xmlDoc.load(path)
      Set root = xmlDoc.documentElement.selectSingleNode("//Report/Doc/DIter")

             msgbox root.childNodes(0).childNodes(10).Nodename
             msgbox root.childNodes(0).childNodes(10).item(3).nodeName
      
      set xmlDoc = Nothing
      
End Function

运行到“msgbox root.childNodes(0).childNodes(10).item(3).nodeName”就报不支持该方法错误,请问大侠该怎么改呢?才能实现我想要那个属性值?

sspku 发表于 2010-11-17 15:19:33

把xml 文件贴出来吧

csj 发表于 2010-11-17 17:28:06

回复 2# sspku
<Report>
<IDIter>
<NodeArgs eType="StartAction" icon="4" nRep="7" status="Failed"><Disp><!]></Disp></NodeArgs><NodeArgs eType="StartAction" icon="4" nRep="150" status="Passed"><Disp><!]></Disp></NodeArgs><NodeArgs eType="StartAction" icon="4" nRep="185" status="Passed"><Disp><!]></Disp></NodeArgs><NodeArgs eType="StartAction" icon="4" nRep="317" status="Passed"><Disp><!]></Disp></NodeArgs><NodeArgs eType="StartAction" icon="4" nRep="369" status="Passed"><Disp><!]></Disp></NodeArgs><NodeArgs eType="StartAction" icon="4" nRep="441" status="Passed"><Disp><!]></Disp></NodeArgs><NodeArgs eType="StartAction" icon="4" nRep="524"><Disp><!]></Disp></NodeArgs><NodeArgs eType="StartAction" icon="4" nRep="526" status="Passed"><Disp><!]></Disp></NodeArgs>
</IDIter>   
</Report>

csj 发表于 2010-11-17 17:30:03

回复 3# csj
说白了就是,解析QTP的result文件中的内容

sspku 发表于 2010-11-17 18:02:23

没有格式,看不懂

csj 发表于 2010-11-17 18:13:13

回复 5# sspku

简化以后的格式
<Report>
<IDIter>
<NodeArgs eType="StartAction" icon="4" nRep="150" status="Passed">
<Disp><!]></Disp></NodeArgs>
</IDIter>   
</Report>
对于上面这个XML怎么获取icon的值?求赐教vbs代码

TIB 发表于 2010-11-17 18:49:29

(1)使用XMLUtil对象。
XMLUtil对象用于读取XML文件,其LoadFile方法可从指定的文件中读入XML格式的文本,返回XMLData对象,例如,下面的脚本:
' 使用XMLUtil对象的CreateXML方法来创建XMLData对象
Set doc = XMLUtil.CreateXML()
' 加载XML文件用于检查
doc.LoadFile "Test.XML"
可用Validate方法来指定某个Schema文件,检查加载的XML文件是否满足Schema的格式要求,例如,下面的脚本检查对象库导出的XML文件是否满足ObjectRepository.xsd的要求:
'检查XML文档是否满足指定的XML schema
ans = doc.Validate ("D:\Program Files\Mercury Interactive\QuickTest Professional\dat\ObjectRepository.xsd")
'如果检查满足Schema,则提示检查成功,否则列出不满足的原因
If ans Then
       MsgBox "XML文件匹配指定的Schema!"
else
       errNo = doc.GetValidationErrorsNumber
      For i = 1 to errNo
            errStr = doc.GetValidationError(i)
            MsgBox errStr
       Next
End If



(2)利用XMLDOM对象来加载XML数据进行分析。
XMLDOM是用来访问和操作XML文档的编程接口规范。XMLDOM被设计为可用于任何语言和任何操作系统。借助DOM,我们可以通过VBScript创建XML文档对象,遍历其结构,增、改、删其元素。DOM将整个XML文档视作一棵树,文档级的元素是树的根。
XMLDOM包含四个主要对象:XMLDOMDocument、XMLDOMNode、XMLDOMNodeList、XMLDOMNamedNodeMap。每个XMLDOM对象有其自己的特性和方法。
下面的例子通过XMLDOM对象加载XML文件,修改指定节点的值,然后保存到另外一个XML文件:
Set xmlDoc = CreateObject("Microsoft.XMLDOM") ' 创建XMLDOM对象
xmlDoc.async = False   
xmlDoc.load "test.xml"        ' 加载XML文档
' 检查XML文档是否有错误
If xmlDoc.parseError.errorCode <> 0 Then   
   Set myErr = xmlDoc.parseError
   MsgBox("XML Loads Failed. " & myErr.reason)
Else
      Set rootNode = xmlDoc.documentElement
                ' 修改XML指定节点的某个属性的值
                rootNode.childNodes(0).childNodes(0).childNodes(0).attributes(4).nodeValue = "E-Mail"
                Print rootNode.childNodes(0).childNodes(0).childNodes(0).attributes(4).nodeValue ' 打印修改后的节点值

                rootNode.childNodes(0).childNodes(0).childNodes(0).attributes(5).nodeValue = "hello!"'修改节点值
                Print rootNode.childNodes(0).childNodes(0).childNodes(0).attributes(5).nodeValue'打印修改后的节点值
                ' 保存xml数据到另外一个文件
                xmlDoc.save "test_save.xml"
End If
Set xmlDoc = Nothing

xhhuang1618 发表于 2010-11-17 20:21:05

回复 1# csj


Function readConfig(str_Path)
   Dim str_nRep,str_icon,str_eType,str_status

        Set xmlDoc = CreateObject("Microsoft.XMLDOM")
        xmlDoc.load(str_Path)
       
        For i = 0 to xmlDoc.getElementsByTagName("NodeArgs").Length -1
                str_nRep = str_nRep + xmlDoc.getElementsByTagName("NodeArgs")(i).attributes.getNamedItem("nRep").nodeValue + vbCrLf
                str_icon = str_icon + xmlDoc.getElementsByTagName("NodeArgs")(i).attributes.getNamedItem("icon").nodeValue + vbCrLf
                str_eType = str_eType + xmlDoc.getElementsByTagName("NodeArgs")(i).attributes.getNamedItem("eType").nodeValue + vbCrLf
                If xmlDoc.getElementsByTagName("NodeArgs")(i).attributes.length = 3 Then
                        str_status = str_status + "No node" + vbCrLf
                else
                       str_status = str_status + xmlDoc.getElementsByTagName("NodeArgs")(i).attributes.getNamedItem("status").nodeValue + vbCrLf
                End If
        Next
       
        Set xmlDoc = Nothing
       
        msgbox str_nRep
        msgbox str_icon
        msgbox str_eType
        msgbox str_status
End Function

csj 发表于 2010-11-18 10:11:35

回复 7# TIB

感激膜拜中

csj 发表于 2010-11-18 10:12:52

回复 8# xhhuang1618


    多谢多谢
页: [1]
查看完整版本: VBS读取XML问题,请大侠帮忙看一下代码