使用SAX/Python解析XML且不进行验证
我刚接触Python,想用SAX来解析一个XML文件,但不想对它进行验证。
我的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解析器去查找一个模式。我哪里做错了呢?谢谢!
1 个回答
4
expatreader把DTD外部子集当作一个外部的通用实体来看待。所以你想要的功能是:
parser.setFeature(handler.feature_external_ges, False)
不过,把DTD外部子集指向一个不存在的URL有点风险;正如这里所示,不仅仅是验证解析器会读取它。