Reputation: 1456
Having trouble getting xml to unmarshal so I can access xml attributes. Not sure what I'm doing wrong at this point. It complies, but the struct doesn't appear to contain any data.
import (
"io/ioutil"
"encoding/xml"
"fmt"
)
contents of 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,"<")
Upvotes: 0
Views: 772
Reputation: 38313
Letter case matters, so the element module
will not be unmarshaled into a field called Module
, you need to add the proper tag. Also you'll need to embed the ModuleField
into Module
so that its fields are promoted to Module
and only then they will be unmarshaled. Or, alternatively, you can remove ModuleField
and move all its fields into Module
.
https://play.golang.org/p/AvaEpcKY-oh
Upvotes: 1