SoapUI属性传输和xpath/xquery数字格式

SoapUI属性传输和xpath/xquery数字格式,xpath,formatting,xquery,soapui,Xpath,Formatting,Xquery,Soapui,我在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/"; //soapE

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

我用$x尝试了几件事,但我尝试的每件事都以null或InvocationTargetException结束


感谢您的帮助

请注意,如果
//soapEnv:Body/LoginResponse/baseSequenceId+1
的值是整数,则在将其转换为字符串时使用XPath

但在本例中,XPath可能返回一个数字,而SoapUI将其转换为字符串,并使用小数点

我会先试试(更新版)

string(//soapEnv:Body/LoginResponse/baseSequenceId + 1)
这是为了强制转换到XPath中的字符串,这样SoapUI就没有机会对数值做任何有趣的事情

或者,你可以试试

floor(//soapEnv:Body/LoginResponse/baseSequenceId + 1)
substring-before(//soapEnv:Body/LoginResponse/baseSequenceId + 1, '.')
甚至

string(floor(...))
如果不行,你可以试试

floor(//soapEnv:Body/LoginResponse/baseSequenceId + 1)
substring-before(//soapEnv:Body/LoginResponse/baseSequenceId + 1, '.')

虽然不太雅致,但可能有用。

非常感谢您的建议,尽管我无法让它们起作用:(
可能我的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()

谢谢!明天早上我将尝试第一个。至于第二个,xpath(//soapEnv:Body/…)得到的XML部分只是一个整数(总是没有任何字符)。虽然,我不知道它是否表示为整数、字符串或其他任何形式。。尽管如此,“点”不会出现!@Stefanos,我知道
//soapEnv:Body/LoginResponse/baseSequenceId
的值始终是整数。但是,小数点在某个地方。我将在我的答案中添加一个建议。如果您的数据是非类型化的(无架构),那么添加的结果将是双精度的。XPath会将其格式设置为“1234567”,但您的宿主语言可能会将其格式设置为结尾处的“.0”。因此,请使用string()在XPath中转换为string函数。我不知道SoapUI使用的是什么xpath版本。我试图找到它,但运气不好:/