在xpath中放大整数标记值

时间:2015-11-03 08:48:04

标签: xml web-services xpath web soapui

有人可以为以下问题推荐解决方案。

我有这样的xml:

<nuts1:SettlementRequest>
           <!--Optional:-->
           <nuts1:MeterReadingId>1842869</nuts1:MeterReadingId>

我需要接受MeterReadingId字段,添加1并将此值输入到下一个请求中,该请求应如下所示:

</nuts:Header>
        <!--Optional:-->
        <nuts1:MeterReadingId>1842870</nuts1:MeterReadingId>

首先我使用了这样的代码:

//*:SettlementRequest/*:MeterReadingId/text()+ 1

但SOAPUI返回的值如

MeterReadingId  [1.84287E6]

这就是为什么我写了复杂的xpath:

concat(substring-before(string(//*:SettlementRequest/*:MeterReadingId/text()+ 1), '.'), substring-before(substring-after(string(//*:SettlementRequest/*:MeterReadingId/text()+ 1), '.'), 'E'))

这段代码一直有效,直到你需要增加Id,结尾如... 69所以最终值应该是1842870.这段代码如下:

MeterReadingId  [184287]

它只省略了最后的0 ...所以我无法得到正确的值。 有人可以提供任何关于如何将1添加到当前meterReadingId的想法,以便我可以收到1842870.

由于

1 个答案:

答案 0 :(得分:0)

似乎SOAPUI为数字返回这种格式,即使您使用XPath函数作为ceiling来计算十进制数并返回最小整数。

所以我建议采用以下方法;

假设您的第一个testStep名为/usr/bin/gcc : section size addr .interp 28 4194928 .note.ABI-tag 32 4194956 .note.gnu.build-id 36 4194988 .gnu.hash 240 4195024 .dynsym 4008 4195264 .dynstr 2093 4199272 .gnu.version 334 4201366 .gnu.version_r 160 4201704 .rela.dyn 720 4201864 .rela.plt 3240 4202584 .init 14 4205824 .plt 2176 4205840 .text 384124 4208016 .fini 9 4592140 .rodata 303556 4592160 .eh_frame_hdr 8540 4895716 .eh_frame 50388 4904256 .gcc_except_table 264 4954644 .tbss 16 7052632 .init_array 16 7052632 .fini_array 8 7052648 .jcr 8 7052656 .data.rel.ro 3992 7052672 .dynamic 480 7056664 .got 216 7057144 .got.plt 1104 7057384 .data 2520 7058496 .bss 80976 7061024 .gnu_debuglink 12 0 Total 849310 ,并且您显示的请求包含:

SOAP Request 1

在第二个testStep中,您要使用之前的<nuts1:SettlementRequest> <!--Optional:--> <nuts1:MeterReadingId>1842869</nuts1:MeterReadingId> ... 加1,请使用以下符号:

<MeterReadingId>

</nuts:Header> <!--Optional:--> <nuts1:MeterReadingId>${=${SOAP Request#response#//*:SettlementRequest/*:MeterReadingId/text()} + 1}</nuts1:MeterReadingId> ... 的解释:

在前一个表达式中,第一个SOAPUI评估${=${SOAP Request 1#response#//*:SettlementRequest/*:MeterReadingId/text()} + 1},它通过名称获取testStep请求(在本例中为${SOAP Request 1#response#//*:SettlementRequest/*:MeterReadingId/text()}),获取SOAP Request属性并应用XPath,使其计算结果为{ {1}},所以现在在此过程之后它有response

然后,SOAPUI将1842869内的表达式计算为groovy脚本,因此它返回${=1842869+1}和,并将toString()应用于结果,为您提供${=}的预期输出。 / p>

希望它有所帮助,