Создайте динамические c XML теги в Groovy - PullRequest
1 голос
/ 10 февраля 2020

Я использую Groovy MarkupBuilder для создания XML файла. Я могу делать это хорошо, когда у меня есть stati c теги, например

def userCreationNumber = "12530";
def userCreationDate = "02/02/2020";
def userCreationAuthor = "admin";
Creation{
    Revision(userCreationNumber)
    Date(userCreationDate )
    Author(userCreationAuthor)
}

, это создает XML вот так

<Creation>
    <Revision>12530</Revision>
    <Date>02/02/2020</Date>
    <Author>admin</Author>
</Creation>

, но как я могу создать XML с Dynami c теги?

Я хочу что-то вроде этого

def actionArray = new ArrayList();
actionArray.add("Added");
actionArray.add("Removed");
actionArray.add("Disabled");

actionArray.each{ action ->
    action(**this is a variable**){
        Revision(userCreationNumber)
        Date(userCreationDate )
        Author(userCreationAuthor)
    }
}

, которое совпадает с:

Added{
    Revision(userCreationNumber)
    Date(userCreationDate )
    Author(userCreationAuthor)
}
Removed{
    Revision(userCreationNumber)
    Date(userCreationDate )
    Author(userCreationAuthor)
}
Disabled{
    Revision(userCreationNumber)
    Date(userCreationDate )
    Author(userCreationAuthor)
}

это создает XML вот так

<Added>
    <Revision>12530</Revision>
    <Date>02/02/2020</Date>
    <Author>admin</Author>
</Added>
<Removed>
    <Revision>12530</Revision>
    <Date>02/02/2020</Date>
    <Author>admin</Author>
</Removed>
<Disabled>
    <Revision>12530</Revision>
    <Date>02/02/2020</Date>
    <Author>admin</Author>
</Disabled>

1 Ответ

3 голосов
/ 10 февраля 2020

Вы можете использовать GString интерполяцию:

import groovy.xml.*

def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
def userCreationNumber = "12530"
def userCreationDate = "02/02/2020"
def userCreationAuthor = "admin"

def actionArray = [ "Added", "Removed", "Disabled" ]

xml.records() {
   actionArray.each{ action ->
      "$action"{
        Revision( userCreationNumber )
        Date( userCreationDate )
        Author( userCreationAuthor )
      }
   }
}

writer

вывод

<records>
  <Added>
    <Revision>12530</Revision>
    <Date>02/02/2020</Date>
    <Author>admin</Author>
  </Added>
  <Removed>
    <Revision>12530</Revision>
    <Date>02/02/2020</Date>
    <Author>admin</Author>
  </Removed>
  <Disabled>
    <Revision>12530</Revision>
    <Date>02/02/2020</Date>
    <Author>admin</Author>
  </Disabled>
</records>

Обратите внимание, что вам нужен элемент root.

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