如何强制Go的标准XML解析器读取DTD实体?

huangapple go评论95阅读模式
英文:

How can I force Go's standard xml parser to read DTD entities

问题

我正在使用Go语言的encoding/xml包来解析一个XML文件。在解析文件时,我遇到了以下错误:

XML语法错误,位于第16行:无效的字符实体ü

但是XML文件引用了一个DTD:

<!DOCTYPE dblp SYSTEM "dblp.dtd">

而该DTD本身包含了该实体的定义:

    <!ENTITY uuml    "ü" ><!-- small u, dieresis or umlaut mark -->

是否有办法强制Go的xml解析器解析DTD,我是否在某个地方遗漏了什么,或者我必须使用第三方的xml解析器?

英文:

I'm using go's encoding/xml package to parse an XML file. When parsing a file, here's the error I get :

XML syntax error on line 16: invalid character entity ü

But the xml file references a dtd :

<!DOCTYPE dblp SYSTEM "dblp.dtd">

And that dtd itself contains the definition of that entity :

    <!ENTITY uuml    "ü" ><!-- small u, dieresis or umlaut mark -->

Is there a way to force Go's xml parser to parse DTDs, did I miss something somewhere or am I doomed to use a third-party xml parser ?

答案1

得分: 2

也许这不是你想听到的答案...

你可以使用http://golang.org/pkg/encoding/xml/#Decoder中的Entity字段。不幸的是,我不知道有没有一种自动从dtd生成这样的实体映射的方法。但是从dtd中提取这些应该很简单。如果dtd不会改变,这可能是使用go generate的一个不错的任务。

如果实体列表是固定的(并且足够小),我会将实体映射硬编码进去。

英文:

Probably not the answer you would like to hear...

You could use the Entity-field of http://golang.org/pkg/encoding/xml/#Decoder. Unfortunately I do not know of an automatic way to generate such entity maps from a dtd. But this should be straightforward to extract from the dtd. If the dtd doesn't change this might be a nice task for go generate.

If the list if entities is fixed (and small enough) I would hardcode the entity map.

huangapple
  • 本文由 发表于 2015年1月23日 18:36:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/28107960.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定