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