用Python读取XML DOCTYPE信息

用Python读取XML DOCTYPE信息,python,xml,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 versio

我需要如下解析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

那这家怎么样

这里是我多年前编写的一段随机代码片段,用于处理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

(仅供参考,这是第一个结果)

因为两个标准库XML库(
XML.dom.minidom
XML.etree
)都使用相同的解析器(
XML.parsers.expat
),您能够成功解析的XML数据的“质量”有限


您最好使用经过验证的真正的第三方模块,如
lxml
BeautifulSoup
,这些模块不仅对错误更具弹性,而且还可以轻松地为您提供所需的功能。

什么是“轻松”呢?在Python中使用各种xml解析器似乎很容易。你还想要什么?我想得到一个更简单的解决方案——比如使用xml.dom.minidom或类似的,而不是使用Python的SAX或其他第三方库。问题是“我想使用……xml.dom.minidom”。您的注释是“使用xml.dom.minidom”。显然,你认为这更容易。问题是什么?我使用xml.dom.minidom解析xml文件,需要解析用嵌入式DTD编写的xml文件的版本。所以,我想知道的是*我可以为此使用xml.dom.minidom吗?*是否有用于此目的的python XML解析器?我猜第一个问题的答案是‘否’,第二个问题的答案也是‘是’。但最好的解决方案可能只是使用正则表达式读取和解析XML。谢谢你的回答。请更新你的问题以澄清它。在你自己的问题上添加评论会让其他人难以理解。请澄清您的问题。看起来不错,但是包含版本号的DTD信息是XML文件的一部分。您实际需要从该文件中获得哪些信息?是否只是来自嵌入式DTD的版本信息?如果是这样的话,为什么不使用正则表达式将其提取出来呢?我想我应该指出,
xmlproc
解析器提供了一个
get\u dtd
方法,该方法将允许您访问已解析XML文件的dtd。这可能是你想要的,也可能不是。这些都在我链接到的文档中解释过。>为什么不用正则表达式将其拉出呢?这就是我为完成这项工作所做的,但我想知道是否有一些功能可以完成这项工作。谢谢,这帮了大忙。