代码之家  ›  专栏  ›  技术社区  ›  prosseek

用python读取xml doctype信息

  •  3
  • prosseek  · 技术社区  · 15 年前

    我需要如下解析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 回复  |  直到 15 年前
        1
  •  2
  •   Will McCutchen    15 年前

    怎么样 xmlproc DTD 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" )

        2
  •  0
  •   jathanism    15 年前

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

    你最好使用那些已经试用过的真正的第三方模块,比如 lxml BeautifulSoup 这不仅对错误有更强的抵抗力,而且会给你带来你正在寻找的东西,而且不会带来任何麻烦。