Перейти XML подавление автоматически сгенерированных тегов? - PullRequest
1 голос
/ 07 июня 2019

Я пытаюсь реализовать формат XML под Go, который был изначально написан на Фортране.Формат уже указан, поэтому я не могу вносить изменения в стандарт.К сожалению, формат включает в себя данные, которые не заключены в тег XML, поэтому я хотел бы отменить автоматическое создание тегов, предоставляемое xml.Marshal.

Я исследовал все стандартные опции, связанные с маршаллингом, так какзадокументировано по адресу: https://golang.org/pkg/encoding/xml/

По умолчанию для маршаллинга будет использоваться имя структурной переменной, которое может быть переопределено определением xml:.Насколько я могу судить, не существует определения, которое подавляет имя тега.

type SAO_FREQUENCY_LIST struct {
    Type string     `xml:",attr"`
    SigFig int      `xml:",attr"`
    Units string        `xml:",attr"`
    Description string  `xml:",attr"`
    Frequencies string  `xml:""`
}

Я хочу, чтобы вывод XML был следующим:

<FrequencyList Type="float" SigFig="5" Units="MHz" Description="Nominal Frequency">
    3.7 3.8
</FrequencyList>"

По умолчанию xml.MarshalIndent (..) выход:

<FrequencyList Type="float" SigFig="5" Units="MHz" Description="”Nominal Frequency">
     <Frequencies>3.7 3.8</Frequencies>
</FrequencyList>

1 Ответ

1 голос
/ 07 июня 2019

Вы можете использовать модификатор ,chardata, чтобы указать, что значение члена структуры должно использоваться в качестве символьных данных для элемента XML. Для вашего примера это будет:

type FrequencyList struct {
    ...
    Frequencies string  `xml:",chardata"`
}

Вы можете поэкспериментировать с примером, используя это изменение здесь: https://play.golang.org/p/oBa8HuE-57d

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