[英]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.