【问题标题】:How to reference an xml node by an index variable in UFT?如何通过 UFT 中的索引变量引用 xml 节点?
【发布时间】:2015-10-26 20:50:09
【问题描述】:

我有许多要编辑的 xml 文件。我要编辑的第一个节点位于所有文件的顶部,并且很容易更改。第二个节点是一个变量索引,取决于我要编辑的文件。我可以很容易地找到节点,如果我用数字引用它,甚至可以编辑正确的节点。但是,如果我通过计数器变量引用它,我将无法编辑该节点。这可以使用 UFT 吗?以下是我目前所拥有的。

'Create a blank XML document for copying and load xxx.xml file
Set xmlDoc = _
  CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = "False"
xmlDoc.Load("G:\xxx\xxx.xml")

'Change the sw version listed at the top of the file to 999
Set colNodes=xmlDoc.selectNodes _
  ("/Device/Model/SoftwareVersion")

For Each objNode in colNodes
   objNode.Text = "999"
Next

'Obtain the part number of the software version  
Set swNode=xmlDoc.selectNodes _
  ("/Device/Model/PartNumber")

For Each objNode in swNode
   swPartNumber = objNode.Text
Next

counter = 0

'Set up var to search through all nodes with strucutre Device/MSM/UpdateFile
Set updateFileNodes=xmlDoc.selectNodes _
  ("/Device/MassStorageMode/UpdateFile")    

'Set up var for updatefile block of major to edit later
Set majorSwNode = xmlDoc.selectNodes _
  ("/Device/MassStorageMode/UpdateFile/Version/Major")  

'Set up var for partnumber block of updatefile to search against for a math
Set partNumberNode = xmlDoc.selectNodes _
    ("/Device/MassStorageMode/UpdateFile/PartNumber")  

For Each objNode in updateFileNodes  

    For Each objNode2 in partNumberNode

        counter = counter + 1
        curPn = objNode2.Text

        isFound = swPartNumber = curPn

                If isFound = True Then 

                Dim index
                index = counter - 1

                'edit the major sw version here...  
                Set editNode = xmlDoc.selectsinglenode ("/Device/MassStorageMode/UpdateFile[counter]/Version/Major")

                editNode.Text = "9"
                xmlDoc.Save "G:\xxx\xxx.xml"                
                Exit For
                End If      
    Next    
Next

我在运行时遇到错误,但是,如果我更改行:

设置editNode = xmlDoc.selectsinglenode("/Device/MassStorageMode/UpdateFile[125]/Version/Major")

在这种特殊情况下使用我的索引变量的值,一切都按预期执行。我需要能够用我的索引变量替换数字。

【问题讨论】:

  • 这段代码似乎没有使用任何特定的 QTP/UFT 功能,我认为您应该将其重新标记为 vbscript

标签: vbscript qtp hp-uft


【解决方案1】:

你需要连接(&)来将一个变量的内容拼接成一个字符串:

>> counter = 125
>> s = "/Device/MassStorageMode/UpdateFile[counter]/Version/Major"
>> WScript.Echo 1, s
>> s = "/Device/MassStorageMode/UpdateFile[" & counter & "]/Version/Major"
>> WScript.Echo 2, s
>>
1 /Device/MassStorageMode/UpdateFile[counter]/Version/Major
2 /Device/MassStorageMode/UpdateFile[125]/Version/Major

【讨论】:

  • 这就像一个魅力。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 2011-04-10
  • 2013-12-05
  • 2021-11-16
  • 2020-06-04
相关资源
最近更新 更多