猿问

Go XML 错误:字符实体无效

Go 无法解析带有声明实体的正确 xml 文件,不断收到此错误:

错误:第 47 行 XML 语法错误:无效字符实体 &n;

线<pos>&n;</pos>和实体定义为<!ENTITY n "noun (common) (futsuumeishi)">

这是 Go 中的程序:http : //play.golang.org/p/94_60srVne


泛舟湖上清波郎朗
浏览 297回答 2
2回答

鸿蒙传说

如果您创建了一个Decoder并弄乱了它的Entity地图,则可以传入实体。我怀疑这个包实际上并没有解析 DTD,只是通过浏览 xml.go;我看到一条评论说它为调用者积累了实体,但它本身没有在d.Entity.(encoding/xml即使安全地提供它也很棘手,因为有一个内置的共享HTML 实体映射。为一个文档更新它会影响其他文档的解析。)创建带有自定义实体的 Decoder 的文书工作比常规的xml.Unmarshal要多一些,但不会太多:func main() {&nbsp; &nbsp; jmd := JMdict{}&nbsp; &nbsp; d := xml.NewDecoder(bytes.NewReader([]byte(str)))&nbsp; &nbsp; d.Entity = map[string]string{&nbsp; &nbsp; &nbsp; &nbsp; "n": "(noun)",&nbsp; &nbsp; }&nbsp; &nbsp; err := d.Decode(&jmd)&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("error: %v", err)&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp; &nbsp; }&nbsp; &nbsp; fmt.Println(jmd)}这是一个带有技巧的Playground 链接Entity和一些将对象显示为 JSON 的输出代码。

暮色呼如

上一个答案是“正确”的答案,但我相信,根据您真正想要完成的任务,“快速”的答案是禁用 Strict。例如:d := xml.NewDecoder(os.Stdin)d.Strict = false&nbsp; &nbsp;&nbsp;
随时随地看视频慕课网APP

相关分类

Go
我要回答