我在SoapUI中有这个属性转移:
declare namespace soapEnv="http://schemas.xmlsoap.org/soap/envelope/";
//soapEnv:Body/LoginResponse/baseSequenceId
然后让它返回 123456 。但我想要 123457 (我得到+1)
我试过了:
declare namespace soapEnv="http://schemas.xmlsoap.org/soap/envelope/";
//soapEnv:Body/LoginResponse/baseSequenceId + 1
但结果是 123457.0 。我尝试了一些我发现的重新格式化方法,但很可能我没有以正确的方式使用它们。我对这个东西很新。
我也试过这个(用xquery):
declare namespace soapEnv="http://schemas.xmlsoap.org/soap/envelope/";
let $x := //soapEnv:Body/LoginResponse/baseSequenceId
return $x
用 $ x 尝试了几件事,但我尝试的所有内容都以null或InvocationTargetException结束。
感谢任何帮助!
答案 0 :(得分:2)
非常感谢你的建议,虽然我无法让它们发挥作用:(
也许我的SoapUI有问题,因为所有xpath函数都返回null ..
我使用了groovy:
groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
loginResponse = groovyUtils.getXmlHolder("Login#Response")
loginResponse.declareNamespace( "soapEnv", "http://schemas.xmlsoap.org/soap/envelope/" )
sessionIdStr = loginResponse.getNodeValue( "//soapEnv:Body/LoginResponse/sessionId" )
baseSequenceIdStr = loginResponse.getNodeValue( "//soapEnv:Body/LoginResponse/baseSequenceId" )
sequenceIdStr = (baseSequenceIdStr.toInteger() + 1).toString()
createRequest = groovyUtils.getXmlHolder("Create#Request")
createRequest.declareNamespace( "soapEnv", "http://schemas.xmlsoap.org/soap/envelope/" )
createRequest.setNodeValue( "//soapEnv:Header/SessionId", sessionIdStr )
createRequest.setNodeValue( "//soapEnv:Header/TransactionId", baseSequenceIdStr )
createRequest.setNodeValue( "//soapEnv:Header/SequenceId", sequenceIdStr )
createRequest.updateProperty()
答案 1 :(得分:1)
请注意,如果//soapEnv:Body/LoginResponse/baseSequenceId + 1
的值为整数,则在将其转换为字符串时为XPath should not put in a decimal point。
但也许在这种情况下XPath返回一个数字,而SoapUI将它转换为字符串,并使用小数点。
我首先尝试(已更新):
string(//soapEnv:Body/LoginResponse/baseSequenceId + 1)
这是为了强制转换为字符串在XPath中发生,因此SoapUI没有机会用数值做任何有趣的事情。
或者,您可以尝试
floor(//soapEnv:Body/LoginResponse/baseSequenceId + 1)
甚至
string(floor(...))
如果这不起作用,您可以尝试
substring-before(//soapEnv:Body/LoginResponse/baseSequenceId + 1, '.')
它不是很优雅,但它可能有效。