我如何强制 Go 的标准 xml 解析器读取 DTD 实体
How can I force Go's standard xml parser to read DTD entities
我正在使用 go 的 encoding/xml
包来解析 XML 文件。解析文件时,这是我得到的错误:
XML syntax error on line 16: invalid character entity ü
但是 xml 文件引用了一个 dtd :
<!DOCTYPE dblp SYSTEM "dblp.dtd">
并且该 dtd 本身包含该实体的定义:
<!ENTITY uuml "ü" ><!-- small u, dieresis or umlaut mark -->
有没有办法强制 Go 的 xml 解析器解析 DTD,是我遗漏了什么地方还是我注定要使用第三方 xml 解析器?
可能不是您想听到的答案...
您可以使用 http://golang.org/pkg/encoding/xml/#Decoder
的 Entity
字段。不幸的是,我不知道从 dtd 生成此类实体映射的自动方法。但这应该很容易从 dtd 中提取出来。如果 dtd 没有改变,这对 go generate
来说可能是个不错的任务。
如果实体列表是固定的(并且足够小),我会硬编码实体映射。
我正在使用 go 的 encoding/xml
包来解析 XML 文件。解析文件时,这是我得到的错误:
XML syntax error on line 16: invalid character entity ü
但是 xml 文件引用了一个 dtd :
<!DOCTYPE dblp SYSTEM "dblp.dtd">
并且该 dtd 本身包含该实体的定义:
<!ENTITY uuml "ü" ><!-- small u, dieresis or umlaut mark -->
有没有办法强制 Go 的 xml 解析器解析 DTD,是我遗漏了什么地方还是我注定要使用第三方 xml 解析器?
可能不是您想听到的答案...
您可以使用 http://golang.org/pkg/encoding/xml/#Decoder
的 Entity
字段。不幸的是,我不知道从 dtd 生成此类实体映射的自动方法。但这应该很容易从 dtd 中提取出来。如果 dtd 没有改变,这对 go generate
来说可能是个不错的任务。
如果实体列表是固定的(并且足够小),我会硬编码实体映射。