go-xml icon indicating copy to clipboard operation
go-xml copied to clipboard

Issue with `type="xsd:date" maxOccurs="unbounded"`

Open eveninglily opened this issue 4 years ago • 1 comments

Hi! Thanks for the excellent tool.

I was using xsdgen on this schema: https://www8.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd

This mostly worked, except for one field:

<xsd:element name="ScheduledOn" type="xsd:date" minOccurs="0" maxOccurs="unbounded"/>

The resulting struct has the correct type:

ScheduledOn []time.Time      `xml:"http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 ScheduledOn,omitempty"`

but in the marshall/unmarshall functions, there's a type mismatch (cannot convert &layout.T.ScheduledOn (value of type *[]time.Time) to *xsdDate)

func (t *Workoutt) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
	type T Workoutt
	var layout struct {
		*T
		ScheduledOn *xsdDate `xml:"http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 ScheduledOn,omitempty"`
	}
	layout.T = (*T)(t)
	layout.ScheduledOn = (*xsdDate)(&layout.T.ScheduledOn)
	return e.EncodeElement(layout, start)
}
func (t *Workoutt) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
	type T Workoutt
	var overlay struct {
		*T
		ScheduledOn *xsdDate `xml:"http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 ScheduledOn,omitempty"`
	}
	overlay.T = (*T)(t)
	overlay.ScheduledOn = (*xsdDate)(&overlay.T.ScheduledOn)
	return d.DecodeElement(&overlay, &start)
}

eveninglily avatar Jan 14 '21 07:01 eveninglily

Same with

    <xs:complexType name="ArrayOfAppManifestsType">
        <xs:sequence>
            <xs:element name="Manifest" type="xs:base64Binary" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

lorenz avatar Feb 04 '21 00:02 lorenz