Как я могу получить данные из вложенного XML, который не использует конечный тег в повторяющихся элементах? - PullRequest
1 голос
/ 15 мая 2019

Согласно приведенной ниже ссылке, мы можем получить данные из вложенного xml, используя > или другую структуру.

Как мне демаршировать вложенные элементы XML в массив?

Однако это не работает, если не использовать конечный тег, подобный этому.

код:

package main

import (
    "fmt"
    "encoding/xml"
)

func main() {

    container := Parent{}
    err := xml.Unmarshal([]byte(xml_data), &container)

    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(container)  
    }
}

var xml_data = `<Parent>
            <Val>Hello</Val>
                <Child Val="Hello"/>
                <Child Val="Hello"/>
                <Child Val="Hello"/>
        </Parent>`

type Parent struct {
    Val string
    Children Children
}

type Children struct {
    Child []Child
}

type Child struct {
    Val string
}

результат:

{Hello {[]}}

Есть решение?

1 Ответ

7 голосов
/ 15 мая 2019

<Child> в вашем XML является «потомком» Parent, поэтому избавьтесь от структуры оболочки Children, срез должен быть полем Parent.Кроме того, значения в <Child> находятся в атрибутах, поэтому вы должны использовать опцию ,attr.

Рабочая модель:

type Parent struct {
    Val   string
    Child []Child
}

type Child struct {
    Val string `xml:",attr"`
}

Это выведет (попробуйте на Go Playground ):

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