Python+;Qt什么库/模块用于读取和写入XML

Python+;Qt什么库/模块用于读取和写入XML,python,xml,qt,pyside,elementtree,Python,Xml,Qt,Pyside,Elementtree,对于我的应用程序,我使用Python+Qt(PySide)的组合。我需要读取和写入XML。目前,我已经使用Python的标准ElementTree模块实现了部分功能。但它也有它的缺点——例如,我不能很好地打印选项卡式XML元素,但它可以在一行中打印所有内容,这是机器可读的,但人类不可读。如果没有一些技巧,我无法使用CDATA元素。。。等等 我还尝试了Python的xml.dom.minidom模块,但在我阅读了一些网上的批评之后,我不愿意继续使用它。还有其他库,比如lxml,但我不想给我的应用程

对于我的应用程序,我使用Python+Qt(PySide)的组合。我需要读取和写入XML。目前,我已经使用Python的标准
ElementTree
模块实现了部分功能。但它也有它的缺点——例如,我不能很好地打印选项卡式XML元素,但它可以在一行中打印所有内容,这是机器可读的,但人类不可读。如果没有一些技巧,我无法使用CDATA元素。。。等等

我还尝试了Python的
xml.dom.minidom
模块,但在我阅读了一些网上的批评之后,我不愿意继续使用它。还有其他库,比如
lxml
,但我不想给我的应用程序引入更多的非标准依赖项


所以我在想,因为我已经依赖Qt库了,我是否应该在所有XML工作中使用Qt。它有
QXmlStreamWriter
QXmlStreamReader
QDom*
类等,所有这些我在使用C++/Qt时都有经验。那么,这是一个好策略吗?有什么缺点吗?Qt-XML库比Python库更好(速度、内存、健壮性……),还是相反?

我不认为仅仅因为一个小特性就需要切换。我当时也在考虑同样的问题,但我决定使用这个小功能,(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文件也可以“非常方便地查看”。

我不认为仅仅因为一个小功能就需要切换。我当时也在考虑同样的问题,但我决定使用这个小功能,(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文件也可以“非常方便地查看”。

我不认为仅仅因为一个小功能就需要切换。我当时也在考虑同样的问题,但我决定使用这个小功能,(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文件也可以“非常方便地查看”。

我不认为仅仅因为一个小功能就需要切换。我当时也在考虑同样的问题,但我决定使用这个小功能,(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文件,大多数(复杂的)编辑器也可以使用此功能进行“漂亮的查看”。

谢谢。我一定会试试这个。@VL.K:问题解决了吗?不幸的是,还没有。尽管如此,我还是对你的答案投了赞成票,因为它似乎解决了我的部分问题。然而,在我的问题中,我更关心的是在Python中使用Qt库中与XML相关的内容是否有意义。以及如何将它们与Python等进行比较。优缺点。。。理想情况下,来自于一个尝试了两种方法的人。我相信这对任何使用Python+Qt的人来说都是很有趣的。@VL.K:如果这是你真正的问题,我担心,它可能会变得过于宽泛和/或固执己见。我不这么认为。对于假设的答案,有什么是自以为是的?例如:“我同时使用了这两种方法,并且我测量到QtXML的处理速度比ET慢30%,但另一方面,它有这个、这个和这个特性,而ET没有。”我也不会把它称为广义的。如果我问“你觉得XML怎么样?”,那么是的,它肯定太宽泛和固执己见了……谢谢。我一定会试试这个。@VL.K:问题解决了吗?不幸的是,还没有。尽管如此,我还是对你的答案投了赞成票,因为它似乎解决了我的部分问题。然而,在我的问题中,我更关心的是在Python中使用Qt库中与XML相关的内容是否有意义。以及如何将它们与Python等进行比较。优缺点。。。理想情况下,来自于一个尝试了两种方法的人。我相信这对任何使用Python+Qt的人来说都是很有趣的。@VL.K:如果这是你真正的问题,我担心,它可能会变得过于宽泛和/或固执己见。我不这么认为。对于假设的答案,有什么是自以为是的?例如:“我同时使用了这两种方法,并且我测量到QtXML的处理速度比ET慢30%,但另一方面,它有这个、这个和这个特性,而ET没有。”我也不会把它称为广义的。如果我问“你觉得XML怎么样?”,那么是的,它肯定太宽泛和固执己见了……谢谢。我一定会试试这个。@VL.K:问题解决了吗?不幸的是,还没有。尽管如此,我还是对你的答案投了赞成票,因为它似乎解决了我的部分问题。然而,在我的问题中,我更关心的是在Python中使用Qt库中与XML相关的内容是否有意义。以及如何将它们与Python等进行比较。优缺点。。。理想情况下,来自于一个尝试了两种方法的人。我相信这对任何使用Python+Qt的人来说都是很有趣的。@VL.K:如果这是你真正的问题,我担心,它可能会变得过于宽泛和/或固执己见。我不这么认为。对于假设的答案,有什么是自以为是的?例如:“我同时使用了这两种方法,并且我测量到QtXML的处理速度比ET慢30%,但另一方面,它有这个、这个和这个特性,而ET没有。”我也不会把它称为广义的。如果我问“你觉得XML怎么样?”,那么是的,它肯定太宽泛和固执己见了……谢谢。我一定会试试这个。@VL.K:问题解决了吗?不幸的是,还没有。尽管如此,我还是对你的答案投了赞成票,因为它似乎解决了我的部分问题。然而,在我的问题中,我更关心的是在Python中使用Qt库中与XML相关的内容是否有意义。以及如何将它们与Python等进行比较。优缺点。。。理想情况下,来自于一个尝试了两种方法的人。我相信