GroovyUtils命名空间两个相同的

GroovyUtils命名空间两个相同的,groovy,soapui,Groovy,Soapui,我的代码如下: def updateValueNode(testStepName, nameSpace, nodeName, val) groovyUtils = new com.eviware.soapui.support.GroovyUtils(context); holder = groovyUtils.getXmlHolder(testStepName); holder.namespaces[("ns")] = nameSpace;

我的代码如下:

def updateValueNode(testStepName, nameSpace, nodeName, val)
    groovyUtils = new com.eviware.soapui.support.GroovyUtils(context);
            holder = groovyUtils.getXmlHolder(testStepName);
            holder.namespaces[("ns")] = nameSpace;;
            return  holder.getNodeValue("//ns:" + nodeName) as String;
和xml类似:

<User>
<userName>UserOne</userName>
</User>
<User>
<userName>UserTwo</userName>
</User>

尝试将方法的最后一行更改为getNodeValue->getNodeValue,String->String[]:

return  holder.getNodeValues("//ns:" + nodeName) as String[];
然后,updateValueNode…[0]-将给出第一个结果,updateValueNode…[1]-第二个结果,依此类推

增加:

另一种选择是在xpath中使用position属性。类似于/a/b/c[position=1]

例如:

def updateValueNode(testStepName, nameSpace, nodeName, index)
    groovyUtils = new com.eviware.soapui.support.GroovyUtils(context);
            holder = groovyUtils.getXmlHolder(testStepName);
            holder.namespaces[("ns")] = nameSpace;;
            return  holder.getNodeValue("//ns:" + nodeName + "[position()="+index+"]") as String;
应该像这样工作:

updateValueNode(..., 1) - first one
updateValueNode(..., 2) - second one
etc.

但是我可以用soupui xpath/实现这一点吗?不更改方法的代码??用另一个解决方案更新了我的答案。我知道,但我不能更改方法。很好,此方法返回第一个找到的结果。就这样。您不能强制它返回第二个找到的结果。因此,您可以更改此方法,或者编写我在帖子中编写的新方法,或者内联我在帖子中编写的方法。没有其他选择。没有确切的上下文需要它的位置和方式。根据描述中的方法名称,假设您正在尝试更新第二个元素userName的值。您可能希望尝试使用属性,请参见
updateValueNode(..., 1) - first one
updateValueNode(..., 2) - second one
etc.