2010-01-04 29 views
1

我是新来的蟒蛇,我试图解析使用SAX 一个XML文件,而不验证它。解析XML使用SAX/Python的+没有验证

我的XML文件的头是:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE n:document SYSTEM "schema.dtd"> 
<n:document.... 

,我已经试过与Python 2.5.2解析它:

from xml.sax import make_parser, handler 
import sys 

parser = make_parser() 
parser.setFeature(handler.feature_namespaces,True) 
parser.setFeature(handler.feature_validation,False) 
parser.setContentHandler(handler.ContentHandler()) 
parser.parse(sys.argv[1]) 

,但我得到了一个错误:

python doc.py document.xml 
(...) 
    File "/usr/lib/python2.5/urllib2.py", line 244, in get_type 
    raise ValueError, "unknown url type: %s" % self.__original 
ValueError: unknown url type: schema.dtd 

我不想SAX解析器寻找一个模式。我错在哪里? 谢谢!

回答

4

expatreader认为DTD外部子集作为外部一般实体。所以,你要的特征是:

parser.setFeature(handler.feature_external_ges, False) 

然而,这是一个有点狡猾指向DTD外部子集到一个不存在的URL;如此所示,它不仅验证解析器读取它。

+0

这并没有解决问题。我仍然得到ValueError未知的url类型。也许在python3中有所改变。 – ThatAintWorking 2014-09-26 18:57:34

+0

@ThatAintWorking假设你有像'<!DOCTYPE富SYSTEM“foo.dtd”'尝试创建在同一目录DTD文件。该名称应该是“foo.dtd”。至少,它应该包含'<!ELEMENT FOO \ n(巴)>'你可能需要用一个实际的回车替换“\ n”。 – 16num 2016-11-08 14:23:48

+0

@ 16num对不起,我甚至不记得这个问题的上下文了。 – ThatAintWorking 2016-11-09 18:33:25