如何使用VBScript获取XML中的节点值?

时间:2017-03-05 00:09:01

标签: xml dom vbscript qtp

我试图将所有重复的节点保存到数组以进行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]
...

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

上面的代码只是一个有很大改进空间的样本。例如,它不检查兄弟节点是否实际上具有相同的节点名称。