【问题标题】:How do I validate xml against a DTD file in Python如何在 Python 中针对 DTD 文件验证 xml
【发布时间】:2010-09-06 03:49:38
【问题描述】:

我需要验证 XML 字符串(而不是文件) 针对 DTD 描述文件。

如何在python 中做到这一点?

【问题讨论】:

    标签: python xml validation dtd


    【解决方案1】:

    另一个不错的选择是lxml's validation,我觉得使用起来非常愉快。

    取自lxml网站的一个简单例子:

    from StringIO import StringIO
    
    from lxml import etree
    
    dtd = etree.DTD(StringIO("""<!ELEMENT foo EMPTY>"""))
    root = etree.XML("<foo/>")
    print(dtd.validate(root))
    # True
    
    root = etree.XML("<foo>bar</foo>")
    print(dtd.validate(root))
    # False
    print(dtd.error_log.filter_from_errors())
    # <string>:1:0:ERROR:VALID:DTD_NOT_EMPTY: Element foo was declared EMPTY this one has content
    

    【讨论】:

      【解决方案2】:

      来自 libxml2 python 绑定中的示例目录:

      #!/usr/bin/python -u
      import libxml2
      import sys
      
      # Memory debug specific
      libxml2.debugMemory(1)
      
      dtd="""<!ELEMENT foo EMPTY>"""
      instance="""<?xml version="1.0"?>
      <foo></foo>"""
      
      dtd = libxml2.parseDTD(None, 'test.dtd')
      ctxt = libxml2.newValidCtxt()
      doc = libxml2.parseDoc(instance)
      ret = doc.validateDtd(ctxt, dtd)
      if ret != 1:
          print "error doing DTD validation"
          sys.exit(1)
      
      doc.freeDoc()
      dtd.freeDtd()
      del dtd
      del ctxt
      

      【讨论】:

      • 请注意,libxml2 绑定不是 Python 标准库的一部分,即不是内置的。
      猜你喜欢
      • 2011-06-14
      • 2012-08-21
      • 1970-01-01
      • 2010-11-08
      • 2010-12-28
      • 2014-04-18
      • 2010-11-19
      • 2011-01-30
      相关资源
      最近更新 更多