在Groovy中提取xml值

时间:2019-01-30 01:53:52

标签: groovy

我有这个代码

String dbresponse = '''
 <rows>
  <row>
    <file_data>One</file_data>
    <time_inserted>2019-01-30T10:29:20.543</time_inserted>
  </row>
  <row>
    <file_data>two</file_data>
    <time_inserted>2019-01-30T10:29:20.547</time_inserted>
  </row>
  <row>
    <file_data>three</file_data>
    <time_inserted>2019-01-30T10:29:20.550</time_inserted>
  </row>
  <row>
    <file_data>four</file_data>
    <time_inserted>2019-01-30T10:29:20.550</time_inserted>
  </row>
  <row>
    <file_data>five</file_data>
    <time_inserted>2019-01-30T10:29:20.553</time_inserted>
  </row>
 </rows>    
'''

def response = new XmlSlurper().parseText(dbresponse)
def data = response.rows.row[1].file_data
print data

我有两个问题:

1]使用上面的代码,为什么我没有得到以下响应:两个? 2]如何遍历整个xml文档以获得此响应: 一 二 三 四 五

谢谢

3 个答案:

答案 0 :(得分:0)

这是它的工作方式:

def rows = new XmlSlurper().parseText(dbresponse)
print (rows.row[1])
print (rows.row[1].file_data)

标识符rows给出了解析dbresponse时返回的对象的句柄(在这种情况下为<rows>)。我将其命名为rows,因为这是制浆者使用的惯例;不一定是。

答案 1 :(得分:0)

  

1]使用上面的代码,为什么我没有得到以下响应:两个?

根据Official Groovy doc应该是

def rows = new XmlSlurper().parseText(dbresponse)
println(rows.row[1].file_data)

第一行是“解析XML并将根节点作为GPathResult返回”。在您的情况下,根节点为rows

  

2]我如何遍历整个xml文档以获得此响应:一二三四五

println("Iterating using each() method")
rows.row.file_data.each { row ->
    println(row)
}

println("Iterating using Groovy for loop")
for (fileData in rows.row.file_data) {
    println(fileData)
}

println("Getting a list of necessary elements using Groovy Spread operator")
def fileDataList = rows.row*.file_data
println(fileDataList)

输出:

Iterating using each() method
One
two
three
four
five

Iterating using Groovy for loop
One
two
three
four
five

Getting a list of necessary elements using Groovy Spread operator
[One, two, three, four, five]

答案 2 :(得分:0)

您几乎在那里,只是小事。

在您发布的脚本中,它试图仅提取第一行数据。这就是为什么剩余数据没有显示的原因。

这是您可以获取所有数据的脚本

def response = new XmlSlurper().parseText(dbresponse)
def data = response.'**'.findAll{it.name() =='row'}*.file_data*.text()
println data

您可以快速在线尝试 Demo