Настройка маршалинга GoLang XML (маршалирование без корневого элемента)

#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/, чтобы найти примеры.