我有这个代码
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文档以获得此响应: 一 二 三 四 五
谢谢
答案 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