GroovyUtils命名空间两个相同的<tag>

时间:2015-09-07 08:35:19

标签: groovy soapui

我的代码如下:

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>

如何使用代码获得第二个用户UserTwo?

第一个我喜欢:

updateValueNode("DoStep#Request", "http://ls.ru/shh/dto/action", "UserName", context.getUserName() as String)

1 个答案:

答案 0 :(得分:0)

尝试将方法的最后一行更改为(getNodeValue - &gt; getNodeValue s ,String - &gt; 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.