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