GetChildElementByAttrRegEx (QTP, TestComplete, XML, VBScript)
Parent page: Service Functions – MSXMLDOM (QTP, TestComplete, VBScript)
Description
Returns child XML node with specified attribute matching specified regex.
Implementation
'Returns FIRST occurrence
Public Function GetChildElementByAttrRegEx(ByRef objXMLParent, ByVal sTagName, ByVal sAttrName, ByVal sAttrRegex, ByVal objParameter)
Dim objColl, objNode
Dim Iter, sValue
Dim boolMatchCase, boolRC
If objXMLParent is Nothing Then
Set GetChildElementByAttrRegEx = Nothing
Exit Function
End If
If TypeName(objParameter) <> "Dictionary" Then
Set objParameter = CreateObject("Scripting.Dictionary")
End If
boolMatchCase = InitBool(Trim(objParameter.Item("p.matchcase")), False)
If Not boolMatchCase Then
sAttrRegex = LCase(sAttrRegex)
End If
Set objColl = objXMLParent.SelectNodes("./"&sTagName)
For Iter = 0 To objColl.Length-1
Set objNode = objColl.Item(Iter)
Call GetXMLElementProperty(objNode, "#ATTR:" & sAttrName, -1, sValue)
If boolMatchCase Then
boolRC = Regex_Test(sValue, sAttrRegex)
Else
boolRC = Regex_Test(LCase(sValue), sAttrRegex)
End If
If boolRC Then
Set GetChildElementByAttrRegEx = objNode
Exit Function
End If
Next
Set GetChildElementByAttrRegEx = Nothing
End Function
Unit Tests
'Unit tests use other functions from the parent library
'Reporting example is done in TestComplete syntax
Set objXMLNode = SetChildElementByAttr(objXMLParent, "step", "alpha", "System Step 1")
Set objXMLNode = SetChildElementByAttr(objXMLParent, "step", "betta", "System Step 2")
Set objXMLNode = SetChildElementByAttr(objXMLParent, "step", "gamma", "System Step 3")
Set objXMLNode = GetChildElementByAttrRegEx(objXMLParent, "step", "name", "tt", Nothing)
If objXMLNode is Nothing Then
Log.Error "GetChildElementByAttrRegEx failed"
End If
boolRC = GetXMLElementProperty(objXMLNode, "#text", -1, sValue)
boolRC = boolRC AND (sValue = "System Step 2")
If Not boolRC Then
Log.Error "GetChildElementByAttrRegEx failed"
End If

