Как подавить корневой элемент в генерации BeanIO XML? - PullRequest
0 голосов
/ 23 апреля 2019

При создании XML-файла с BeanIO имя StreamBuilder используется в качестве корневого элемента. Как подавить этот корневой элемент?

Пример:

StreamBuilder builder = new StreamBuilder("builder_name")
    .format("xml")
    .parser(new XmlParserBuilder()).addRecord(Test.class);

Класс Test:

@Record
public class Test {

    @Field(at=0)
    private String field1 = "ABC";

    // Getters and Setters ...

}

Сгенерированный файл XML:

<builder_name>
  <Test>
    <field1>ABC</field1>
  </Test>
</builder_name>

Я не хочу, чтобы builder_name отображался как корневой элемент. Я хочу, чтобы элемент Test был корневым. Как мне этого добиться?

1 Ответ

0 голосов
/ 23 апреля 2019

Вам необходимо установить для свойства / атрибута xmlType значение XmlType.NONE в конфигурации потока.

Ответ содержится в Приложение А. Ссылка на файл сопоставления XML документации.

xmlType - тип узла XML, сопоставленный с потоком.Если он не указан или не установлен в элемент, поток сопоставляется с корневым элементом документа XML, который маршалируется или демаршалируется.Если установлено значение none, входной поток XML будет полностью прочитан и сопоставлен с дочерней группой или записью.

Теперь уловка заключается в том, чтобы преобразовать эту часть информации в API StreamBuilder, а именно:

xmlType(XmlType.NONE)

Ваш пример становится следующим:

StreamBuilder builder = new StreamBuilder("builder_name")
  .format("xml")
  .xmlType(XmlType.NONE)
  .parser(new XmlParserBuilder())
  .addRecord(Test.class);

, который производит этот неотформатированный / незагруженный вывод:

<?xml version="1.0" encoding="utf-8"?><test><field1>ABC</field1></test>

Для форматирования XML (довольно печати) / с отступомиспользуйте:

StreamBuilder builder = new StreamBuilder("builder_name")
  .format("xml")
  .xmlType(XmlType.NONE)
  .parser(new XmlParserBuilder()
    .indent()
  )
  .addRecord(Test.class);

Обратите внимание на изменение XmlParserBuilder, чтобы получить этот вывод:

<?xml version="1.0" encoding="utf-8"?>
<test>
  <field1>ABC</field1>
</test>
...