1

使用下面的 XML 代码:

def 肥皂响应 = "

<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 XmlParser().parseText(soapResponse)

我想使用 GPath 来获取第一行(Row rowNumber="1")下 ID_ORDER 的值。

这有效,以下变量填充了 144107:

def id_order = inputXML.ResultSet.Row[0].ID_ORDER

但是,我需要能够从 excel 表中构造该 GPath。但是当我使用 ResultSet/Row[0]/ID_ORDER 填充 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_order。期望它将填充 144107。如果我将索引“[0]”从行 [0] 中取出,那么它会成功地从 XML 中获取所有 ID_ORDER 值。但是因为我只想要第一个,所以我使用索引 0 但它不起作用 - 值是空的。

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

4

1 回答 1

1

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

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
于 2016-05-21T02:08:07.803 回答