Python + Qt用于读写XML的库/模块

时间:2014-01-10 14:36:11

标签: python xml qt pyside elementtree

对于我的应用程序,我使用的是Python + Qt(PySide)的组合。我需要读取和写入XML。目前,我已经使用Python的标准ElementTree模块实现了部分功能。但它有它的缺点 - 例如我不能对标签式XML元素进行漂亮的打印,而是将所有内容打印在一行中,这是机器可读但人类不可读的。没有一些黑客等我就无法使用CDATA元素。

我也试过Python的xml.dom.minidom模块,但在我在网上看到某些批评之后,我不愿继续使用它。还有其他库,例如lxml,但我不想在我的应用程序中引入更多非标准依赖项。

所以我在想,因为我已经依赖于Qt库,我是否应该将Qt用于我所有的XML工作。它有QXmlStreamWriterQXmlStreamReaderQDom*类等,所有这些都是我在使用C ++ / Qt时遇到的。那么,这是一个好策略吗?有什么缺点吗? Qt XML库比Python更好(速度,内存,健壮性......)还是相反?

1 个答案:

答案 0 :(得分:3)

由于次要功能,我认为不需要切换。当时我正在考虑同样的问题,但我决定使用这个小功能,(c)ElementTree将适用于漂亮的打印:

def indentXmlTree(elem, level = 0): 
    ''' 
    In-place prettyprint formatter for the xml tree
    '''

    i = os.linesep + level * '  '
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        if not elem.tail or not elem.tail.strip():
            elem.tail = i 
        for elem in elem:
            indentXmlTree(elem, level + 1)
        if not elem.tail or not elem.tail.strip():
            elem.tail = i 
    else:
        if level and (not elem.tail or not elem.tail.strip()):
            elem.tail = i

另请注意,即使对于机器可读的xml文件,大多数(复杂的)编辑器都可以使用此功能进行“漂亮查看”。