繁体   English   中英

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

[英]How to Use Regular Expression in XPATH in XML in 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

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

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

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

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

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

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

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

在任何地方查找MessageElements

非常感谢您的投入

最后它用xpath / soap解决了:Envelope / soap:Body / / MessageElements / [0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM