Извлечение значения XML в Groovy - PullRequest
0 голосов
/ 30 января 2019

У меня есть этот код

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 голосов
/ 30 января 2019

1] С приведенным выше кодом, почему я не получаю ответ: два?

В соответствии с Официальный Groovy документ это должно быть

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]
0 голосов
/ 31 января 2019

Вы почти там, просто тривиально.

В размещенном вами скрипте он пытался извлечь только данные первой строки.Вот почему остальные данные не отображаются.

Вот скрипт, который вы можете получить все данные

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

Вы можете быстро попробовать его онлайн Демо

0 голосов
/ 30 января 2019

Вот как это работает:

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

Идентификатор rows дает указатель на объект, возвращаемый при синтаксическом анализе dbresponse (в данном случае <rows>).Я назвал это rows, так как это обычное использование slurp'ers;это не должно быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...