对于我的应用程序,我使用的是Python + Qt(PySide)的组合。我需要读取和写入XML。目前,我已经使用Python的标准ElementTree
模块实现了部分功能。但它有它的缺点 - 例如我不能对标签式XML元素进行漂亮的打印,而是将所有内容打印在一行中,这是机器可读但人类不可读的。没有一些黑客等我就无法使用CDATA元素。
我也试过Python的xml.dom.minidom
模块,但在我在网上看到某些批评之后,我不愿继续使用它。还有其他库,例如lxml
,但我不想在我的应用程序中引入更多非标准依赖项。
所以我在想,因为我已经依赖于Qt库,我是否应该将Qt用于我所有的XML工作。它有QXmlStreamWriter
,QXmlStreamReader
,QDom*
类等,所有这些都是我在使用C ++ / Qt时遇到的。那么,这是一个好策略吗?有什么缺点吗? Qt XML库比Python更好(速度,内存,健壮性......)还是相反?
答案 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文件,大多数(复杂的)编辑器都可以使用此功能进行“漂亮查看”。