xml.Marshal игнорировать структуру, если она пуста - PullRequest
0 голосов
/ 28 мая 2019

Мне нужно вывести файл XML, и я построил несколько структур, которые представляют его. В качестве базового примера скажем так:

type Parent struct {
    XMLName xml.Name `xml:"parent"`
    Name    string   `xml:"name,omitempty"`
    Age     int64    `xml:"age,omitempty"`
    Child   Child    `xml:"child,omitempty`
}

type Child struct {
    XMLName  xml.Name `xml:"child,omitempty"`
    Name     string   `xml:"name,omitempty"`
    Gender   string   `xml:"gender,omitempty"`
    Thoughts string   `xml:",innerxml,omitempty"`
}

Я ожидаю, что когда я создаю Parent безопределение дочернего элемента, а затем его маршалирование в файл XML ...

parent := Parent{
    Name: "Beatrice",
    Age: "23",
}
_ = xml.MarshalIndent(parent, "", "    ")

... что я должен получить файл XML, не содержащий тега child:

<parent>
    <name>Beatrice</name>
    <age>23</age>
</parent>

Вместо этого я получаю следующее:

<parent>
    <name>Beatrice</name>
    <age>23</age>
    <child></child>
</parent>

Почему там есть пустой тег <child></child> и как я могу от него избавиться?

1 Ответ

3 голосов
/ 28 мая 2019

У вас есть несколько синтаксических ошибок, но вы можете установить дочерний как указатель:

type Parent struct {
    XMLName xml.Name `xml:"parent"`
    Name    string   `xml:"name,omitempty"`
    Age     int64    `xml:"age,omitempty"`
    Child   *Child    `xml:"child,omitempty"`
}

Когда он равен нулю, он будет пустым.

Рабочая демоверсия

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