diff --git a/src/pkg/xml/read.go b/src/pkg/xml/read.go index 786b69f5a32..f64e1300189 100644 --- a/src/pkg/xml/read.go +++ b/src/pkg/xml/read.go @@ -321,10 +321,9 @@ func (p *Parser) unmarshal(val reflect.Value, start *StartElement) os.Error { // Save v := sv.FieldByIndex(f.Index) - if _, ok := v.Interface().(Name); !ok { - return UnmarshalError(sv.Type().String() + " field XMLName does not have type xml.Name") + if _, ok := v.Interface().(Name); ok { + v.Set(reflect.ValueOf(start.Name)) } - v.Set(reflect.ValueOf(start.Name)) } // Assign attributes. diff --git a/src/pkg/xml/read_test.go b/src/pkg/xml/read_test.go index 2126da3c751..d39c2d52a83 100644 --- a/src/pkg/xml/read_test.go +++ b/src/pkg/xml/read_test.go @@ -369,3 +369,25 @@ var attrStruct = AttrTest{ Bool: true, }, } + +// test data for TestUnmarshalWithoutNameType + +const OK = "OK" +const withoutNameTypeData = ` + +` + +type TestThree struct { + XMLName bool `xml:"Test3"` // XMLName field without an xml.Name type + Attr string `xml:"attr"` +} + +func TestUnmarshalWithoutNameType(t *testing.T) { + var x TestThree + if err := Unmarshal(StringReader(withoutNameTypeData), &x); err != nil { + t.Fatalf("Unmarshal: %s", err) + } + if x.Attr != OK { + t.Fatalf("have %v\nwant %v", x.Attr, OK) + } +}