#xml #go #marshalling
#xml #Вперед #маршалинг
Вопрос:
Как маршалировать без корневого элемента?
type Ids struct {
Id []string `xml:"id"`
}
IdsStr, _ := xml.Marshal(amp;Ids{[]string{"test1", "test2"}})
Выходной идентификатор STR равен:
<Ids><id>test1</id><id>test2</id></Ids>
Он должен быть без элемента Ids:
<id>test1</id><id>test2</id>
Ответ №1:
type id string
func main() {
IdsStr, _ := xml.Marshal([]id{"test1", "test2"})
fmt.Println(string(IdsStr))
}
или
type id string
type Ids struct {
Vals []id
}
func main() {
ids := amp;Ids{[]id{"test1", "test2"}}
IdsStr, _ := xml.Marshal(ids.Vals)
fmt.Println(string(IdsStr))
}
0utput
<id>test1</id><id>test2</id>
Комментарии:
1. Большое вам спасибо. Но как я могу задать добровольные XML-имена для элементов? Vals []id xml: «idSomeOther» возвращает идентификатор после маршалирования xml, потому что это имя типа… Мне нужно настроить идентификатор типа для ввода IdXml, но маршалированный xml должен возвращать идентификатор. Как я могу это получить? play.golang.org/p/DtEPBc_M3LK
Ответ №2:
…Но как я могу задать добровольные XML-имена для элементов? Vals []id xml: «idSomeOther» возвращает идентификатор после маршалирования xml, потому что это имя типа… Мне нужно настроить идентификатор типа для ввода IdXml, но маршалированный xml должен возвращать идентификатор. Как я могу это получить?
Вы можете использовать XMLName xml.Name
, тег xml:",chardata"
(и т.д.) Для настройки struct
type Customs struct {
Vals []CustomXml
}
type CustomXml struct {
XMLName xml.Name
Chardata string `xml:",chardata"`
}
func main() {
customs := Customs{
[]CustomXml{
{XMLName: xml.Name{Local: "1"}, Chardata: "XXX"},
{XMLName: xml.Name{Local: "2"}, Chardata: "YYY"}},
}
res, _ := xml.Marshal(customs.Vals)
fmt.Println(string(res))
}
0utput
<1>XXX</1><2>YYY</2>
👉🏻 кроме того, посмотрите на src/encoding/xml/, чтобы найти примеры.