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

GroovyUtils namespace two same <tag>

我有这样的代码:

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)

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