我试图将所有重复的节点保存到数组以进行QTP自动化。
当我们使用下面的代码时,我们得到XML中存在的所有重复节点。 例如:
strXmlPCoverage = /cts:InsuranceClaim/cts:MedicalClaim
Set nodes = xmlDoc.SelectNodes(strXmlPCoverage)
PathLength = nodes.Length
让我们说PathLength
返回" 6"标签作为重复标签存在于XML中。
/cts:InsuranceClaim/cts:MedicalClaim[0] /cts:InsuranceClaim/cts:MedicalClaim[1] /cts:InsuranceClaim/cts:MedicalClaim[2] /cts:InsuranceClaim/cts:MedicalClaim[3] /cts:InsuranceClaim/cts:MedicalClaim[4] /cts:InsuranceClaim/cts:MedicalClaim[5]
现在我想将所有这6条不同的路径保存到数组中。我无法识别显示nodes
中存储的值的属性。
Set nodes = xmlDoc.SelectNodes(strXmlPCoverage)
PathLength = nodes.Length
For Each NodeItem In nodes
ArrAllNodes(i) = NodeItem.nodeValue
Next
上面的代码将该节点的值存储到Array而不是节点本身。你能帮我解决一下如何将节点存储到数组而不是节点值
代码显示的输出:
ArrAllNodes(0) = abc
ArrAllNodes(1) = xyz
...
预期输出
ArrAllNodes(0) = /cts:InsuranceClaim/cts:MedicalClaim[0]
ArrAllNodes(1) = /cts:InsuranceClaim/cts:MedicalClaim[1]
...
答案 0 :(得分:1)
NodeValue
属性为您提供节点的值。您正在寻找的是节点的路径。 DOM对象没有提供该信息的方法/属性,因此您需要通过在DOM树中向上遍历来确定路径(通过ParentNode
属性)。
这样的事情可能会给你一个起点:
Function HasSiblings(n)
HasSiblings = (TypeName(n.PreviousSibling) = "IXMLDOMElement") Or _
(TypeName(n.NextSibling) = "IXMLDOMElement")
End Function
Function GetIndex(n)
If n.PreviousSibling Is Nothing Then
GetIndex = 0
Else
GetIndex = GetIndex(n.PreviousSibling) + 1
End If
End Function
Function GetPath(n)
path = "\" & n.NodeName
'add index if node has siblings
If HasSiblings(n) Then
path = path & "[" & GetIndex(n) & "]"
End If
'add parent path if current node is not the document element
If TypeName(n.ParentNode) = "IXMLDOMElement" Then
path = GetPath(n.ParentNode) & path
End If
GetPath = path
End Function
上面的代码只是一个有很大改进空间的样本。例如,它不检查兄弟节点是否实际上具有相同的节点名称。