Go 无法解析带有已声明实体的正确 xml 文件,不断出现此错误:
error: XML syntax error on line 47: invalid character entity &n;
行是<pos>&n;</pos>
实体定义为 <!ENTITY n "noun (common) (futsuumeishi)">
这是 Go 中的程序:http://play.golang.org/p/94_60srVne
最佳答案
如果您创建了一个Decoder
并弄乱了它的Entity
映射,您就可以传入实体。我怀疑这个包实际上并没有解析 DTD,只是通过四处寻找 xml.go ;我看到一条评论说它为调用者积累了实体,但它本身没有在 d.Entity
中设置条目。
(encoding/xml
安全地提供它会很棘手,甚至,因为有一个内置的 shared HTML 实体映射。为一个文档更新它会影响其他人的解析。)
与常规 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 link使用 Entity
技巧和一些输出代码将对象显示为 JSON。
关于转到 XML 错误 : invalid character entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28662417/