2015-09-07 70 views
0

我有这样的代码:GroovyUtils命名空间两路相同的<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?

第一个我fecth像:

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

还没有确切的情况下在那里和它是如何需要。从描述中的方法名称中,假设您正在尝试更新第二个元素'userName'的值。可能你想尝试使用属性,请参阅http://www.soapui.org/scripting---properties/property-expansion.html – Rao

回答

0

尝试方法的最后线改变至(getNodeValue - > getNodeValue 小号,字符串 - >字符串[]):

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. 
+0

但是,我可以使用soupui xpath /?来执行此操作吗?不改变方法的代码?? –

+0

用另一个解决方案更新了我的答案。 – bezmax

+0

我知道,但我不能改变方法 –

相关问题