XML-сортировка вложенных элементов в Grails с использованием синтаксиса Groovy-разметки
Grails: v2.5.0
Как я могу генерировать XML, включая вложенные элементы без атрибутов?
Это мой желаемый результат:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<book>
<title>Title</title>
<authors>
<author>
<fname>First Name</fname>
<lname>Last Name</lname>
</author>
</authors>
</book>
</list>
Используя следующий маршаллер...
// imports...
class BootStrap {
def init = { servletContext ->
XML.registerObjectMarshaller(Book) { Book book, converter ->
converter.build {
title book.title
authors {
for (a in book.authors) {
author {
fname a.fname
lname a.lname
}
}
}
}
}
}
}
... authors
элемент не включен в вывод:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<book>
<title>Title</title>
</book>
</list>
Однако при добавлении атрибута к authors
а также author
элементы...
// imports...
class BootStrap {
def init = { servletContext ->
XML.registerObjectMarshaller(Book) { Book book, converter ->
converter.build {
title book.title
authors(bla: 'bla') {
for (a in book.authors) {
author(bla: 'bla') {
fname a.fname
lname a.lname
}
}
}
}
}
}
}
... элементы включены в вывод:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<book>
<title>Title</title>
<authors bla="bla">
<author bla="bla">
<fname>First Name</fname>
<lname>Last Name</lname>
</author>
</authors>
</book>
</list>
Может ли кто-нибудь указать мне правильное направление?
Спасибо!
2 ответа
Решение
Нашел решение: добавьте скобки и пустой список.
Вот код:
// imports...
class BootStrap {
def init = { servletContext ->
XML.registerObjectMarshaller(Book) { Book book, converter ->
converter.build {
title book.title
authors([]) {
for (a in book.authors) {
author([]) {
fname a.fname
lname a.lname
}
}
}
}
}
}
}
Добавьте пустые скобки к авторам и вызовам авторов следующим образом:
converter.build {
title book.title
authors() {
for (a in book.authors) {
author() {
fname a.fname
lname a.lname
}
}
}
Посмотрите этот ТАК вопрос с примером.