Is that always the first child element? You can try
/soap:Envelope/soap:Body/*/MessageElements/*[1]
Question
I am facing a issue in QTP, i have to select a node value using regular expressions in XML
My Xml outputs the code as shown below
<MessageElements xmlns="">
<MessageStatus>FAIL</MessageStatus>
<ErrorList>
<ErrorCode>1951</ErrorCode>
<ErrorMessage>No Data Found</ErrorMessage>
<ErrorStatus>F</ErrorStatus>
<ErrorText>OSSDataNotFoundError</ErrorText>
</ErrorList>
<MessageAddressing>
<from>ICL</from>
<to>ICL SOAPTester</to>
<relatesTo/>
<messageId>12345</messageId>
<action>SearchResource</action>
<timestamp>2008-09-29T07:19:45</timestamp>
<transactionId>1234</transactionId>
<ServiceName>SearchResource</ServiceName>
<ServiceVersion>2.0</ServiceVersion>
</MessageAddressing>
</MessageElements>
Here if you observe the second line of the XML, we have MessageStatus
but sometimes I get messageStatus
.
I want to handle this situation with a single XPath so that if lowercase tag or uppercase tag MessageStatus
appears it should match and return the value.
My code for Retrieving the value is as below
Set ObjXml = Createobject("Microsoft.XMLDOM")
Case 1
Set ObjNode=ObjXml.SelectSingleNode("/soap:Envelope/soap:Body/*/MessageElements/.*essageStatus")
ResultText=ObjNode.text
Case 2
Set ObjNode=ObjXml.SelectSingleNode("/soap:Envelope/soap:Body/*/MessageElements/[m|M]essageStatus")
ResultText=ObjNode.text
Case 3
Set ObjNode=ObjXml.SelectSingleNode("/soap:Envelope/soap:Body/*/MessageElements//wsageStatus")
ResultText=ObjNode.text
But none of them worked, please help me.
La solution
Is that always the first child element? You can try
/soap:Envelope/soap:Body/*/MessageElements/*[1]
Autres conseils
XPath doesn't support regular expressions in the way you're trying to use them (it doesn't support them at all in XPath 1.0), but you can do what you want with
/soap:Envelope/soap:Body/*/MessageElements/*[self::MessageStatus | self::messageStatus]
assuming the namespace binding for the soap
prefix is set up correctly (I'm not familiar with the particular technology you're using). If the namespaces cause a problem then the easiest workaround would be to use just
//MessageElements/*[self::MessageStatus | self::messageStatus]
to find MessageElements
wherever it occurs.
Thanks a lot freinds for your inputs
Finally it has solved with the xpath /soap:Envelope/soap:Body//MessageElements/[0]