如何在QTP中使用XML中的XPATH中的正则表达式

时间:2014-05-06 08:31:14

标签: xml web-services soap xpath qtp

我在QTP中遇到问题,我必须使用XML中的正则表达式选择节点值

我的Xml输出如下所示的代码

 <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>

如果您观察XML的第二行,我们会MessageStatus,但有时会得到messageStatus

我想用单个XPath处理这种情况,这样如果出现小写标记或大写标记MessageStatus,它应该匹配并返回值。

我的检索值的代码如下

Set ObjXml = Createobject("Microsoft.XMLDOM")

案例1

Set ObjNode=ObjXml.SelectSingleNode("/soap:Envelope/soap:Body/*/MessageElements/.*essageStatus")
ResultText=ObjNode.text

案例2

Set ObjNode=ObjXml.SelectSingleNode("/soap:Envelope/soap:Body/*/MessageElements/[m|M]essageStatus")
ResultText=ObjNode.text

案例3

Set ObjNode=ObjXml.SelectSingleNode("/soap:Envelope/soap:Body/*/MessageElements//wsageStatus")
ResultText=ObjNode.text

但是他们都没有工作,请帮助我。

3 个答案:

答案 0 :(得分:1)

这总是第一个子元素吗?你可以尝试

/soap:Envelope/soap:Body/*/MessageElements/*[1]

答案 1 :(得分:1)

XPath不支持正在尝试使用它们的正则表达式(它在XPath 1.0中根本不支持它们),但你可以用你想做的事情

/soap:Envelope/soap:Body/*/MessageElements/*[self::MessageStatus | self::messageStatus]

假设soap前缀的名称空间绑定设置正确(我不熟悉您正在使用的特定技术)。如果命名空间导致问题,那么最简单的解决方法是使用

//MessageElements/*[self::MessageStatus | self::messageStatus]

在任何地方找到MessageElements

答案 2 :(得分:0)

感谢很多朋友的投入

最后用xpath / soap解决了:Envelope / soap:Body / / Message Elements / [0]