英文:
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 "&#252;" ><!-- 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 &uuml;
But the xml file references a dtd :
<!DOCTYPE dblp SYSTEM "dblp.dtd">
And that dtd itself contains the definition of that entity :
<!ENTITY uuml "&#252;" ><!-- 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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论