2 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果您創(chuàng)建了一個(gè)Decoder并弄亂了它的Entity地圖,則可以傳入實(shí)體。我懷疑這個(gè)包實(shí)際上并沒(méi)有解析 DTD,只是通過(guò)瀏覽 xml.go;我看到一條評(píng)論說(shuō)它為調(diào)用者積累了實(shí)體,但它本身沒(méi)有在d.Entity.
(encoding/xml即使安全地提供它也很棘手,因?yàn)橛幸粋€(gè)內(nèi)置的共享HTML 實(shí)體映射。為一個(gè)文檔更新它會(huì)影響其他文檔的解析。)
創(chuàng)建帶有自定義實(shí)體的 Decoder 的文書(shū)工作比常規(guī)的xml.Unmarshal要多一些,但不會(huì)太多:
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)
}
這是一個(gè)帶有技巧的Playground 鏈接Entity和一些將對(duì)象顯示為 JSON 的輸出代碼。

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
上一個(gè)答案是“正確”的答案,但我相信,根據(jù)您真正想要完成的任務(wù),“快速”的答案是禁用 Strict。例如:
d := xml.NewDecoder(os.Stdin)
d.Strict = false
- 2 回答
- 0 關(guān)注
- 335 瀏覽
添加回答
舉報(bào)