Marshal struct array to xml без родительского тега - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь упорядочить структуру go с массивом в xml . В этом массиве мне нужно иметь атрибут для каждого элемента и значение. Мне не нужно, чтобы это было внутри родительского тега xml .

У меня есть код ниже.

package main

import (
    "encoding/xml"
    "fmt"
    "os"
)

func main() {
    type Person struct {
        XMLName   xml.Name `xml:"person"`
        Id        int      `xml:"id,attr"`
        FirstName string
    }

    a := &Person{
       Id: 13,
       FirstName: "John",
    }
    b := &Person{
       Id: 14,
       FirstName: "Doe",
    }
    x := []*Person{}
    x = append(x, a)
    x = append(x, b)

    enc := xml.NewEncoder(os.Stdout)
    enc.Indent("  ", "    ")
    if err := enc.Encode(x); err != nil {
        fmt.Printf("error: %v\n", err)
    }
}

Он производит вывод ниже.

<person id="13">
  <FirstName>John</FirstName>
</person>
<person id="14">
  <FirstName>Doe</FirstName>
</person>

Но мне нужно сделать это, как показано ниже.

<person id="13">John</person>
<person id="14">Doe</person>

Любая помощь по этому вопросу высоко ценится. Могу ли я сделать это с го?

1 Ответ

1 голос
/ 26 октября 2019

Просто добавьте тег xml:",chardata" в поле FirstName:

package main

import (
    "encoding/xml"
    "fmt"
    "os"
)

func main() {
    type Person struct {
        XMLName   xml.Name `xml:"person"`
        ID        int      `xml:"id,attr"`
        FirstName string   `xml:",chardata"`
    }

    a := &Person{
        ID:        13,
        FirstName: "John",
    }
    b := &Person{
        ID:        14,
        FirstName: "Doe",
    }
    x := []*Person{}
    x = append(x, a)
    x = append(x, b)

    enc := xml.NewEncoder(os.Stdout)
    enc.Indent("  ", "    ")
    if err := enc.Encode(x); err != nil {
        fmt.Printf("error: %v\n", err)
    }
}

Вывод:

<person id="13">John</person>
<person id="14">Doe</person>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...