我需要解析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文件的版本。
答案 0 :(得分:2)
这是我多年前写的随机代码片段,用于处理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.minidom
和xml.etree
)都使用相同的解析器(xml.parsers.expat
),所以您在XML数据的“质量”方面受到限制成功解析。
你最好使用那些经过验证的第三方模块,例如lxml
或BeautifulSoup
,这些模块不仅能够更好地应对错误,而且能够准确地为您提供寻找一点点麻烦。