使用SAX/Python解析XML且不进行验证

1 投票
1 回答
4042 浏览
提问于 2025-04-15 17:36

我刚接触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有点风险;正如这里所示,不仅仅是验证解析器会读取它。

撰写回答