перейти unmarshal xml с атрибутами - PullRequest
0 голосов
/ 01 апреля 2019

Возникли проблемы с получением XML для разархивирования, чтобы я мог получить доступ к атрибутам xml. Не уверен, что я делаю не так в данный момент. Это соответствует, но структура не содержит каких-либо данных.

import (
    "io/ioutil"
    "encoding/xml"
    "fmt"
)

содержимое xml:

  <module id="Core" description="Core Module" tenantId="tenant1" major="3" minor="4" patch="0" build="0">
    <probePath path="bin" />
  </module>
</metadata>
type ModuleField struct {
    Id string `xml:"id,attr"`
    Description string `xml:"description,attr"`
    TenantId string `xml:"tenantId,attr"`
    Major string `xml:"major,attr"`
    Minor string `xml:"minor,attr"`
    Patch string `xml:"patch,attr"`
}

type Module struct {
    ModuleField ModuleField
    ProbePath string `xml:"probePath"`
}

type Metadata struct {
    XMLName xml.Name `xml:"metadata"`
    Module Module
}

// read xml file
    raw, _ := ioutil.ReadFile(XMLLoc)
    if err != nil {
        return
    }


    var XMLData Metadata 
    xml.Unmarshal(raw, &XMLData)

    // nothing is being printed
    fmt.Println(">",XMLData.Module.ModuleField.TenantId,"<")


1 Ответ

1 голос
/ 01 апреля 2019

Регистр букв имеет значение, поэтому элемент module не будет преобразован в поле с именем Module, вам необходимо добавить соответствующий тег.Также вам нужно будет встроить ModuleField в Module, чтобы его поля были повышены до Module, и только тогда они будут разбиты.Или вы можете удалить ModuleField и переместить все его поля в Module.

https://play.golang.org/p/AvaEpcKY-oh

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