Parsing XML: arbre D'éléments (etree) vs. minidom [dupliquer]

cette question a déjà une réponse ici:

j'utilise minidom pour analyser XML depuis des années. Maintenant, j'ai soudainement appris à propos de l'Élément de l'Arbre. Ma question qui est meilleur pour l'analyse? Que est:

  • qui est plus rapide?
  • qui utilise moins de mémoire?
  • Ne soit tout O(n^2) les dépendances que je devrait s'inquiéter?
  • est-ce que l'un est déprécié en faveur de l'autre?

Pourquoi avons-nous deux interfaces?

Merci.

26
demandé sur vy32 2011-11-05 22:56:46

2 réponses

Python a deux interfaces probablement parce que L'arbre D'éléments a été intégré dans la bibliothèque standard beaucoup plus tard après minidom est venu pour être. La raison en était probablement son API beaucoup plus "pythonique" que le DOM contrôlé par W3C.

si vous êtes préoccupé par la vitesse, il y a aussi lxml , qui construit un DOM compatible ElementTree en utilisant libxml2 et devrait être assez rapide – ils ont une suite de référence se comparant à Les implémentations Python et C d'ElementTree sont disponibles.

si vous êtes préoccupé par l'utilisation de la mémoire, vous ne devriez pas utiliser une API d'arbre de toute façon; PullDOM pourrait être un meilleur choix, mais je suis extrapolation à partir de l'expérience en utilisant L'excellent pull parser de Java – il ne semble pas y avoir beaucoup d'informations à jour sur PullDOM.

14
répondu millimoose 2011-11-05 19:10:24

les interfaces DOM et Sax pour l'analyse XML sont les moyens classiques de travailler avec XML. Python a dû fournir ces interfaces parce qu'elles sont bien connues et standard.

le paquet ElementTree était destiné à fournir une interface plus pythonique. Il s'agit de rendre les choses plus faciles pour le programmeur.

selon votre construction, chacun de ceux-ci a une implémentation C sous-jacente qui les fait fonctionner rapidement.

aucun de les outils ci-dessus est désapprouvée. Ils ont chacun leurs mérites (Sax n'a pas besoin de lire l'ensemble des entrées dans la mémoire, par exemple).

il existe également un module tiers appelé lxml qui est également un choix populaire (complet et rapide).

19
répondu Raymond Hettinger 2011-11-05 19:01:01