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