82 votes

Traitement XML en Python

Je suis sur le point de construire un morceau d'un projet qui aura nécessité de construire et de publier un document XML à un service web, et j'aimerais le faire en Python, comme un moyen pour élargir mes compétences.

Malheureusement, alors que je sais que le modèle XML assez bien .NET, je ne suis pas certain que les avantages et les inconvénients sont le XML des modèles en Python.

Quelqu'un a une expérience à faire de traitement de données XML en Python? Où voulez-vous suggérer-je commencer? Les fichiers XML, je vais bâtir sera assez simple.

36voto

saint_groceon Points 2696

Personnellement, j'ai joué avec plusieurs options intégrées sur un XML-lourds du projet et se sont installés sur pulldom comme le meilleur choix pour moins de documents complexes.

Surtout pour les petites choses simples, j'aime l'event-driven " de la théorie de l'analyse plutôt que la création de toute une série de rappels pour une relativement simple de la structure. Voici une bonne discussion rapide de l'utilisation de l'API.

Ce que j'aime: vous pouvez gérer l'analyse dans un for boucle plutôt que d'utiliser les callbacks. Vous aussi retarder complète l'analyse (le "pull") et seulement obtenir des détails supplémentaires lorsque vous appelez expandNode(). Cela répond à mes exigences générales pour les "responsables" de l'efficacité sans sacrifier la facilité d'utilisation et la simplicité.

33voto

Gareth Simpson Points 5905

ElementTree a une belle pythony API. Je crois même que c'est expédié dans le cadre de python 2.5

C'est dans le plus pur python et comme je l'ai dit, très joli, mais si vous finissez par avoir besoin de plus de performance, alors lxml expose la même API et utilise libxml2 sous le capot. Vous pouvez théoriquement juste changer en lorsque vous découvrez que vous en avez besoin.

8voto

Kent Quirk Points 51

Il existe 3 principaux moyens de traiter avec XML, en général: dom, sax, et xpath. Le modèle dom est bon si vous pouvez vous permettre de charger l'ensemble de votre fichier xml en mémoire à la fois, et vous n'avez pas l'esprit de traiter avec des structures de données, et vous êtes à la recherche à beaucoup de/la plupart de la modèle. Le sax modèle est idéal si vous ne se soucient un peu de balises, et/ou vous faites affaire avec de gros fichiers et permet de les traiter de manière séquentielle. Le xpath modèle est un peu de chacun -- vous pouvez choisir les chemins les éléments de données dont vous avez besoin, mais il nécessite plus de bibliothèques à utiliser.

Si vous voulez simple et emballé avec Python, minidom est votre réponse, mais il est assez boiteux, et la documentation est "voici docs sur les dom, allez le comprendre". C'est vraiment ennuyeux.

Personnellement, j'aime cElementTree, qui est plus rapide (c) la mise en œuvre de ElementTree, qui est un dom-comme modèle.

J'ai utilisé sax systèmes, et dans de nombreux égards, ils sont plus "pythonic" dans leur sens, mais j'ai l'habitude de finir la création de l'état des systèmes à gérer, et que la voie est de la folie (et les bugs).

Je dis aller avec minidom si vous voulez la recherche, ou ElementTree si vous voulez du bon code qui fonctionne bien.

6voto

Bernard Points 10700

Dive Into Python a un chapitre. Ne peut pas se porter garant pour la façon dont il serait bien que.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X