我在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
但是他们都没有工作,请帮助我。
答案 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]