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

Go XML 错误:字符实体无效

Go XML 错误:字符实体无效

Go
泛舟湖上清波郎朗 2021-09-13 20:01:25
Go 无法解析带有声明实体的正确 xml 文件,不断收到此错误:错误:第 47 行 XML 语法错误:无效字符实体 &n;线<pos>&n;</pos>和实体定义为<!ENTITY n "noun (common) (futsuumeishi)">这是 Go 中的程序:http : //play.golang.org/p/94_60srVne
查看完整描述

2 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

如果您创建了一个Decoder并弄乱了它的Entity地图,则可以传入实体。我怀疑这个包实际上并没有解析 DTD,只是通过浏览 xml.go;我看到一条评论说它为调用者积累了实体,但它本身没有在d.Entity.


(encoding/xml即使安全地提供它也很棘手,因为有一个内置的共享HTML 实体映射。为一个文档更新它会影响其他文档的解析。)


创建带有自定义实体的 Decoder 的文书工作比常规的xml.Unmarshal要多一些,但不会太多:


func main() {

    jmd := JMdict{}


    d := xml.NewDecoder(bytes.NewReader([]byte(str)))

    d.Entity = map[string]string{

        "n": "(noun)",

    }

    err := d.Decode(&jmd)

    if err != nil {

        fmt.Printf("error: %v", err)

        return

    }

    fmt.Println(jmd)

}

这是一个带有技巧的Playground 链接Entity和一些将对象显示为 JSON 的输出代码。


查看完整回答
反对 回复 2021-09-13
?
暮色呼如

TA贡献1853条经验 获得超9个赞

上一个答案是“正确”的答案,但我相信,根据您真正想要完成的任务,“快速”的答案是禁用 Strict。例如:


d := xml.NewDecoder(os.Stdin)

d.Strict = false    


查看完整回答
反对 回复 2021-09-13
  • 2 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

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