Yes, this behavior is expected. The attributes are parsed, but not returned as a xml.Token. Attributes simply arn't Tokens. See: http://golang.org/pkg/encoding/xml/#Token
The attributes are accessible through the Attr field in the Token StartElement. See: http://golang.org/pkg/encoding/xml/#StartElement
(( Some general hints:
a) Do not use print or println.
b) The a, ok := t.(SomeType) idioma is called "comma okay", because the boolean is normaly named "ok", not "is". Please stick to these conventions.
c) Idiomatic would be something like
switch t := t.(type) {
case xml.StartElement: ...
case xml.EndElement: ...
}
instead of your list of "if a, is = t.(xml.Attr) ..."
d) All this "var se xml.StartElement" is noise (clutter). Use
if se, ok := t.(xml.StartElement); ok { ... }
This would make your code much readable. ))