使用以下XML代码:
def soapResponse ="
<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>
&#34;
def inputXML = new XmlParser()。parseText(soapResponse)
我想使用GPath在第一行下获取ID_ORDER的值(Row rowNumber =&#34; 1&#34;)。
这样可行,下面的变量填充了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.如果我采用索引&#34; [0]&#34;在Row [0]之外,它成功地从XML中获取所有ID_ORDER值。但由于我只想要第一个,我使用索引0但它不起作用 - 值是空的。
希望有人可以解决这个问题。
答案 0 :(得分:1)
一种方法是使用适当的绑定在新的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