Python中的XML处理

2024-05-15 14:14:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我将要构建一个项目的一部分,该项目将需要构建XML文档并将其发布到web服务,我希望使用Python来完成,以此来扩展我在其中的技能。

不幸的是,虽然我对.NET中的XML模型非常了解,但我不确定Python中的XML模型的优缺点是什么。

有没有人有在Python中进行XML处理的经验?你建议我从哪里开始?我要构建的XML文件将相当简单。


Tags: 文件项目文档模型webnet技能经验
3条回答

ElementTree有一个不错的pythony API。我认为它甚至作为Python2.5的一部分发布

它是纯python的,正如我所说,非常好,但是如果您最终需要更多性能,那么lxml将公开相同的API并在幕后使用libxml2。理论上,当你发现你需要它的时候,你可以把它换进去。

一般来说,处理XML有三种主要方法:dom、sax和xpath。如果您能够负担得起一次将整个xml文件加载到内存中,并且不介意处理数据结构,并且您正在查看模型的大部分内容,那么dom模型是很好的。如果您只关心几个标记和/或处理大文件并可以按顺序处理它们,那么sax模型非常好。xpath模型是每个模型的一小部分——您可以选择所需数据元素的路径,但它需要使用更多的库。

如果你想用Python直接打包,minidom是你的答案,但它很蹩脚,文档是“这里有dom文档,去弄清楚吧”。真烦人。

就我个人而言,我喜欢ElementTree,它是ElementTree的一个更快(基于c)的实现,ElementTree是一个类似dom的模型。

我使用过sax系统,在很多方面,它们的感觉更像是“pythonic”,但我通常会创建基于状态的系统来处理它们,这种方式是疯狂的(和错误)。

如果你喜欢研究,我建议你使用minidom;如果你想要运行良好的代码,我建议你使用ElementTree。

就我个人而言,我已经在一个XML繁重的项目中使用了一些内置选项,并且已经决定将pulldom作为不太复杂的文档的最佳选择。

特别是对于一些简单的小东西,我喜欢事件驱动的解析理论,而不是为一个相对简单的结构设置一大堆回调。Here is a good quick discussion of how to use the API

我喜欢的是:您可以在for循环中处理解析,而不是使用回调。您还可以延迟完全解析(“pull”部分),并且只在调用expandNode()时获得额外的详细信息。这满足了我对“负责任”效率的一般要求,同时又不牺牲易用性和简单性。

相关问题 更多 >