Go XML错误:无效的字符实体

loc*_*ost 4 go

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

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

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

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

two*_*two 6

如果您创建了一个实体Decoder并且弄乱了它的Entity地图,则可以传入实体.我怀疑这个软件包实际上并没有解析DTD,只是来自于xml.go ; 我看到一条评论说它累积了调用者的实体,但没有任何东西本身设置条目d.Entity.

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

使用自定义实体创建一个解码器的文书工作比普通实体更多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)
}
Run Code Online (Sandbox Code Playgroud)

这是一个Playground链接,其中包含Entity技巧和一些输出代码,用于将对象显示为JSON.