【问题标题】:How to Use Regular Expression in XPATH in XML in QTP如何在 QTP 中的 XML 中使用 XPATH 中的正则表达式
【发布时间】:2014-06-22 18:29:36
【问题描述】:

我在 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

但它们都不起作用,请帮助我。

【问题讨论】:

  • 如果您正在测试生成此 XML 的服务,这种不可预测的大写不应该被视为错误吗?
  • 旧要求与消息状态有关
  • 新要求mrnts 与 MessageStatus 一起

标签: xml web-services soap xpath qtp


【解决方案1】:

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

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

【讨论】:

  • 这是检索 MESSAGEADDRESSING 标记中的所有值 :(
  • 你能显示你的输入 XML 吗?当没有输入 XML 可供使用时,我只能猜测。
  • /soap:Envelope/soap:Body/*/MessageElements/*[0] 这对乔尔有效。非常感谢
【解决方案2】:

XPath 不支持您尝试使用的正则表达式(在 XPath 1.0 中根本不支持它们),但您可以随心所欲地使用它们

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

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

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

找到MessageElements,无论它出现在哪里。

【讨论】:

  • 预期令牌 ']' 发现 ':'。 //MessageElements/*[self-->:
【解决方案3】:

非常感谢您的意见

终于解决了 xpath /soap:Envelope/soap:Body//MessageElements/[0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 2011-02-14
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 2020-08-15
    • 2014-03-13
    相关资源
    最近更新 更多