在 xpath 中放大整数标记值
Enlarge integer tag value in xpath
有人可以为以下问题推荐一个解决方案吗?
我有这样的 xml:
<nuts1:SettlementRequest>
<!--Optional:-->
<nuts1:MeterReadingId>1842869</nuts1:MeterReadingId>
我需要获取 MeterReadingId 字段,将其添加到 1 并将此值输入到下一个请求中,它应该如下所示:
</nuts:Header>
<!--Optional:-->
<nuts1:MeterReadingId>1842870</nuts1:MeterReadingId>
首先我使用了这样的代码:
//*:SettlementRequest/*:MeterReadingId/text()+ 1
但是 SOAPUI returns 的值像
MeterReadingId [1.84287E6]
这就是我写复杂xpath的原因:
concat(substring-before(string(//*:SettlementRequest/*:MeterReadingId/text()+ 1), '.'), substring-before(substring-after(string(//*:SettlementRequest/*:MeterReadingId/text()+ 1), '.'), 'E'))
这段代码一直有效,直到您需要递增以 ...69 结尾的 Id,因此最终值应为 1842870。此代码如下:
MeterReadingId [184287]
它只是省略了最后一个0...所以我无法得到正确的值。
有人可以提供有关如何将 1 添加到当前 meterReadingId 以便我可以收到 1842870 的任何想法。
谢谢
似乎 SOAPUI returns 这种数字格式,即使您使用 XPath 函数作为 ceiling
计算十进制数和 returns 最小整数。
所以我推荐以下方法;
假设您的第一个 testStep 被命名为 SOAP Request 1
并且您显示的请求包含:
<nuts1:SettlementRequest>
<!--Optional:-->
<nuts1:MeterReadingId>1842869</nuts1:MeterReadingId>
...
并且在第二个 testStep 中要使用前面的 <MeterReadingId>
加 1 使用以下符号:
</nuts:Header>
<!--Optional:-->
<nuts1:MeterReadingId>${=${SOAP Request#response#//*:SettlementRequest/*:MeterReadingId/text()} + 1}</nuts1:MeterReadingId>
...
${=${SOAP Request 1#response#//*:SettlementRequest/*:MeterReadingId/text()} + 1}
的解释:
在前面的表达式中,首先 SOAPUI 计算 ${SOAP Request 1#response#//*:SettlementRequest/*:MeterReadingId/text()}
,它通过名称获取 testStep 请求(在本例中为 SOAP Request
,获取 response
属性 并应用XPath 所以它的计算结果为 1842869
,所以现在在这个过程之后它有 ${=1842869+1}
。
然后 SOAPUI 将 ${=}
中的表达式计算为 groovy 脚本,因此它 returns 1842869+1
总和并将 toString() 应用于结果,从而为您提供预期的结果输出为 1842870
.
希望对您有所帮助,
有人可以为以下问题推荐一个解决方案吗?
我有这样的 xml:
<nuts1:SettlementRequest>
<!--Optional:-->
<nuts1:MeterReadingId>1842869</nuts1:MeterReadingId>
我需要获取 MeterReadingId 字段,将其添加到 1 并将此值输入到下一个请求中,它应该如下所示:
</nuts:Header>
<!--Optional:-->
<nuts1:MeterReadingId>1842870</nuts1:MeterReadingId>
首先我使用了这样的代码:
//*:SettlementRequest/*:MeterReadingId/text()+ 1
但是 SOAPUI returns 的值像
MeterReadingId [1.84287E6]
这就是我写复杂xpath的原因:
concat(substring-before(string(//*:SettlementRequest/*:MeterReadingId/text()+ 1), '.'), substring-before(substring-after(string(//*:SettlementRequest/*:MeterReadingId/text()+ 1), '.'), 'E'))
这段代码一直有效,直到您需要递增以 ...69 结尾的 Id,因此最终值应为 1842870。此代码如下:
MeterReadingId [184287]
它只是省略了最后一个0...所以我无法得到正确的值。 有人可以提供有关如何将 1 添加到当前 meterReadingId 以便我可以收到 1842870 的任何想法。
谢谢
似乎 SOAPUI returns 这种数字格式,即使您使用 XPath 函数作为 ceiling
计算十进制数和 returns 最小整数。
所以我推荐以下方法;
假设您的第一个 testStep 被命名为 SOAP Request 1
并且您显示的请求包含:
<nuts1:SettlementRequest>
<!--Optional:-->
<nuts1:MeterReadingId>1842869</nuts1:MeterReadingId>
...
并且在第二个 testStep 中要使用前面的 <MeterReadingId>
加 1 使用以下符号:
</nuts:Header>
<!--Optional:-->
<nuts1:MeterReadingId>${=${SOAP Request#response#//*:SettlementRequest/*:MeterReadingId/text()} + 1}</nuts1:MeterReadingId>
...
${=${SOAP Request 1#response#//*:SettlementRequest/*:MeterReadingId/text()} + 1}
的解释:
在前面的表达式中,首先 SOAPUI 计算 ${SOAP Request 1#response#//*:SettlementRequest/*:MeterReadingId/text()}
,它通过名称获取 testStep 请求(在本例中为 SOAP Request
,获取 response
属性 并应用XPath 所以它的计算结果为 1842869
,所以现在在这个过程之后它有 ${=1842869+1}
。
然后 SOAPUI 将 ${=}
中的表达式计算为 groovy 脚本,因此它 returns 1842869+1
总和并将 toString() 应用于结果,从而为您提供预期的结果输出为 1842870
.
希望对您有所帮助,