为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Go的encoding / xml.Decoder.Token()

为什么Go的encoding / xml.Decoder.Token()

Go
神不在的星期二 2021-05-13 10:58:04
我正在尝试使用encoding / xml.Decoder手动解析从http://www.khronos.org/files/collada_schema_1_4加载的XML文件出于测试目的,我只是遍历文档,打印出遇到的任何令牌类型:func Test (r io.Reader) {    var t xml.Token    var pa *xml.Attr    var a xml.Attr    var co xml.Comment    var cd xml.CharData    var se xml.StartElement    var pi xml.ProcInst    var ee xml.EndElement    var is bool    var xd = xml.NewDecoder(r)    for i := 0; i < 24; i++ {        if t, err = xd.Token(); (err == nil) && (t != nil) {            if a, is = t.(xml.Attr); is { print("ATTR\t"); println(a.Name.Local) }            if pa, is = t.(*xml.Attr); is { print("*ATTR\t"); println(pa) }            if co, is = t.(xml.Comment); is { print("COMNT\t"); println(co) }            if cd, is = t.(xml.CharData); is { print("CDATA\t"); println(cd) }            if pi, is = t.(xml.ProcInst); is { print("PROCI\t"); println(pi.Target) }            if se, is = t.(xml.StartElement); is { print("START\t"); println(se.Name.Local) }            if ee, is = t.(xml.EndElement); is { print("END\t\t"); println(ee.Name.Local) }        }    }}现在是输出:PROCI   xmlCDATA   [1/64]0xf84004e050START   schemaCDATA   [2/129]0xf84004d090COMNT   [29/129]0xf84004d090CDATA   [2/129]0xf84004d090START   annotationCDATA   [3/129]0xf84004d090START   documentationCDATA   [641/1039]0xf840061000END     documentationCDATA   [2/1039]0xf840061000END     annotationCDATA   [2/1039]0xf840061000COMNT   [37/1039]0xf840061000CDATA   [2/1039]0xf840061000START   importEND     importCDATA   [2/1039]0xf840061000COMNT   [14/1039]0xf840061000CDATA   [2/1039]0xf840061000START   elementCDATA   [3/1039]0xf840061000START   annotation请注意,即使到最后(第24行)也没有输出ATTR或* ATTR行,即使在根xs:schema元素以及xs:import和xs:element元素中都传递了许多属性。这在Windows 7 64位下的Go 1.0.3 64位中。我是在做错事还是应该提交Go软件包错误报告?[旁注:在执行常规xml.Unmarshal到正确准备的结构中时,由xml包捕获并映射已知命名和映射的属性就可以了。但是我还需要在根元素中收集“未知”属性(以收集此用例的命名空间信息,该用例为http://github.com/metaleap/go-xsd),因此我尝试使用Decoder.Token()。]
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信