带有变量的Groovy GPath

带有变量的Groovy GPath,groovy,gpath,Groovy,Gpath,使用下面的XML代码: def soapResponse=” 但是,我需要能够从excel工作表构造该GPath。但是,当我使用ResultSet/Row[0]/ID\u顺序填充excel单元格并将上述行作为变量执行时: def excelVariable = //getting "ResultSet/Row[0]/ID_ORDER" from sheet def excelVariableArray = excelVariable.split('/') //create array of i

使用下面的XML代码:

def soapResponse=”

但是,我需要能够从excel工作表构造该GPath。但是,当我使用ResultSet/Row[0]/ID\u顺序填充excel单元格并将上述行作为变量执行时:

def excelVariable = //getting "ResultSet/Row[0]/ID_ORDER" from sheet
def excelVariableArray = excelVariable.split('/')  //create array of it, separated by "/"
def id_order = inputXML."${excelVariableArray[0]}"."${excelVariableArray[1]}"."${excelVariableArray[2]}".text()  //traverse through XML, get value of "ID_ORDER" under 1st "Row"element
此处未填充id_顺序。预期它将填充144107。如果我从行[0]中获取索引“[0]”,则它将成功地从XML中获取所有id_顺序值。但由于我只需要第一个,因此我使用索引0,但它不起作用-值为空


希望有人能提出解决方案。

一种方法是在新的
GroovyShell
中执行
excelVariable
表达式,并使用适当的绑定:

def inputXMLStr = """
<Results>
   <ResultSet fetchSize="10">
      <Row rowNumber="1">
         <ID_ORDER>144107</ID_ORDER>
         <CH_LNAME>TESTING</CH_LNAME>
         <CH_FNAME>QA</CH_FNAME>
      </Row>
      <Row rowNumber="2">
         <ID_ORDER>144108</ID_ORDER>
         <CH_LNAME>TESTING</CH_LNAME>
         <CH_FNAME>QA</CH_FNAME>
      </Row>
   </ResultSet>
</Results>
"""

def inputXML = new XmlSlurper().parseText(inputXMLStr)

def map = [:]
map["inputXML"] = inputXML
def binding = new Binding(map)
def shell = new GroovyShell(binding)

def excelVariable = "inputXML.ResultSet.Row[0].ID_ORDER" 
def result = shell.evaluate(excelVariable)
assert result == inputXML.ResultSet.Row[0].ID_ORDER
def inputXMLStr=”“”
144107
测试
质量保证
144108
测试
质量保证
"""
def inputXML=new XmlSlurper().parseText(inputXMLStr)
def map=[:]
映射[“inputXML”]=inputXML
def绑定=新绑定(映射)
def外壳=新GroovyShell(绑定)
def excelVariable=“inputXML.ResultSet.Row[0]。ID\U顺序”
def结果=shell.evaluate(EXCEL变量)
断言结果==inputXML.ResultSet.Row[0]。ID\U顺序

您需要非常小心,精心编制的excel工作表可能会利用您的系统进行攻击。这些工作表来自何处?这是一个excel工作表,其中包含测试数据,位于Ready!API项目的项目文件夹中。这对我不起作用-结果变量结果是空的。可能是因为我使用的是XmlParser而不是XmlSlurper?我应该在一开始就提到这一点。
def excelVariable = //getting "ResultSet/Row[0]/ID_ORDER" from sheet
def excelVariableArray = excelVariable.split('/')  //create array of it, separated by "/"
def id_order = inputXML."${excelVariableArray[0]}"."${excelVariableArray[1]}"."${excelVariableArray[2]}".text()  //traverse through XML, get value of "ID_ORDER" under 1st "Row"element
def inputXMLStr = """
<Results>
   <ResultSet fetchSize="10">
      <Row rowNumber="1">
         <ID_ORDER>144107</ID_ORDER>
         <CH_LNAME>TESTING</CH_LNAME>
         <CH_FNAME>QA</CH_FNAME>
      </Row>
      <Row rowNumber="2">
         <ID_ORDER>144108</ID_ORDER>
         <CH_LNAME>TESTING</CH_LNAME>
         <CH_FNAME>QA</CH_FNAME>
      </Row>
   </ResultSet>
</Results>
"""

def inputXML = new XmlSlurper().parseText(inputXMLStr)

def map = [:]
map["inputXML"] = inputXML
def binding = new Binding(map)
def shell = new GroovyShell(binding)

def excelVariable = "inputXML.ResultSet.Row[0].ID_ORDER" 
def result = shell.evaluate(excelVariable)
assert result == inputXML.ResultSet.Row[0].ID_ORDER