【问题标题】:Parsing XML with SAX/Python + no validation使用 SAX/Python 解析 XML + 无验证
【发布时间】:2011-01-01 04:32:55
【问题描述】:

我是 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 解析器查找模式。我哪里错了? 谢谢!

【问题讨论】:

    标签: python xml validation sax


    【解决方案1】:

    expatreader 将 DTD 外部子集视为外部通用实体。所以你想要的功能是:

    parser.setFeature(handler.feature_external_ges, False)
    

    但是,将 DTD 外部子集指向不存在的 URL 有点狡猾;如图所示,它不仅验证读取它的解析器。

    【讨论】:

    • 这并没有解决问题。我仍然得到 ValueError 未知 url 类型。也许在 python3 中发生了一些变化。
    • @ThatAintWorking 假设您有类似&lt;!DOCTYPE foo SYSTEM "foo.dtd" 的内容,请尝试在同一目录中创建一个 dtd 文件。名称应为“foo.dtd”。至少它应该包含&lt;!ELEMENT foo \n(bar)&gt;,您可能需要用实际的回车替换“\n”。
    • @16num 抱歉,我什至不记得这个问题的背景了。
    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 2013-10-25
    • 2015-06-28
    • 2012-08-27
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多