XMLNode2Dictionary (QTP, TestComplete, VBScript)
Parent page: Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)
Service Functions – Dictionary (QTP, TestComplete, VBScript)
Description
Create Dictionary object and populate with data (only direct content – text, comments, CData, and attributes) taken from XML node.
Naming convention:
- @attr_name for attributes;
- #text_index for text nodes;
- #comment_index for comment nodes;
- #cdata_index for CData Section nodes.
Implementation
Public Function XMLNode2Dictionary(ByRef objXMLElement)
Dim objDictionary
Dim objColl, objAttr, Iter
Dim intCommentCount, intTextCount, intCDataCount
Set objDictionary = CreateObject("Scripting.Dictionary")
If objXMLElement is Nothing Then
objDictionary.Item("#innertext") = ""
Set XMLNode2Dictionary = objDictionary
Exit Function
End If
objDictionary.Item("#innertext") = objXMLElement.Text
intCommentCount = 0
intTextCount = 0
intCDataCount = 0
Set objColl = objXMLElement.ChildNodes
For Iter=0 To objColl.length-1
Select Case objColl.Item(Iter).NodeName
Case "#comment"
intCommentCount = intCommentCount + 1
objDictionary.Item("#comment_"&intCommentCount) = objColl.Item(Iter).NodeValue
Case "#text"
intTextCount = intTextCount + 1
objDictionary.Item("#text_"&intTextCount) = objColl.Item(Iter).NodeValue
Case "#cdata-section"
intCDataCount = intCDataCount + 1
objDictionary.Item("#cdata_"&intCDataCount) = objColl.Item(Iter).NodeValue
Case Else
'ignore
End Select
Next
For Each objAttr in objXMLElement.Attributes
objDictionary.Item("@"&objAttr.Name) = objAttr.Value
Next
Set XMLNode2Dictionary = objDictionary
End Function

