1

圣杯: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>

但是,当向authorsauthor元素添加属性时...

// 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>

有人可以指出我正确的方向吗?

谢谢!

4

2 回答 2

1

找到了解决方案:添加括号和一个空列表。

这是代码:

// 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
            }
          }
        }
      }
    }
  }
}
于 2015-07-14T17:14:56.917 回答
0

在作者和作者调用中添加空括号,如下所示:

    converter.build {
      title book.title
      authors() {
        for (a in book.authors) {
          author() {
            fname a.fname
            lname a.lname
        }
      }
    }

请参阅此 SO 问题的示例

于 2015-07-14T14:21:29.913 回答