使用Python读取XML DOCTYPE信息

时间:2010-01-27 14:08:53

标签: python xml

我需要解析XML文件的版本,如下所示。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE twReport [ 
<!ELEMENT twReport (twHead?, (twWarn | twDebug | twInfo)*, twBody, twSum?, 
               twDebug*, twFoot?, twClientInfo?)> 
<!ATTLIST twReport version CDATA "10,4"> <----- VERSION INFO HERE

我使用xml.dom.minidom来解析XML文件,我需要解析用嵌入式DTD编写的XML文件的版本。

  • 我可以将xml.dom.minidom用于此目的吗?
  • 是否有用于此目的的python XML解析器?

2 个答案:

答案 0 :(得分:2)

xmlprocDTD api怎么样?

这是我多年前写的随机代码片段,用于处理Python中的DTD,这可能会让您了解使用此库的方式:

from xml.parsers.xmlproc import dtdparser

attr_separator = '_'
child_separator = '_'

dtd = dtdparser.load_dtd('schedule.dtd')

for name, element in dtd.elems.items():
    for attr in element.attrlist:
        output = '%s%s%s = ' % (name, attr_separator, attr)
        print output
    for child in element.get_valid_elements(element.get_start_state()):
        output = '%s%s%s = ' % (name, child_separator, child)
        print output

(仅供参考,这是searching for "python dtd parser"

时的第一个结果

答案 1 :(得分:0)

因为两个标准库XML库(xml.dom.minidomxml.etree)都使用相同的解析器(xml.parsers.expat),所以您在XML数据的“质量”方面受到限制成功解析。

你最好使用那些经过验证的第三方模块,例如lxmlBeautifulSoup,这些模块不仅能够更好地应对错误,而且能够准确地为您提供寻找一点点麻烦。