donné Comment puis-je obtenir le champ avec nom = "cadre.len" immédiatement sans itération à chaque étiquette et en vérifiant les attributs? P> P>
3 Réponses :
vous ne le faites pas - le DOM API , un peu mal conçu (par W3C, pas par Python! -) N'a pas une telle fonction de recherche de faire l'itération pour vous. Acceptez la nécessité de boucler (pas à travers beauxoup code> ou < Code> lxml code>. p>
Je ne pense pas que vous puissiez.
de l'élément parent réagir à votre commentaire du 11 mars, si la structure de vos documents est stable et Gratuit de mauvaises surprises (comme des crochets d'angle à l'intérieur des attributs), vous voudrez peut-être essayer l'impensable et utiliser une expression régulière. Ceci n'est pas une pratique recommandée mais pourrait fonctionner et être beaucoup plus facile que d'analyser le fichier. J'avoue que je l'ai fait parfois moi-même. Je n'ai pas encore devenu aveugle. P> Donc, dans votre cas, vous pourriez (en supposant qu'un code>, vous devez p> filedump = open("myfile.xml").read()
for match in re.finditer(r'<field\s+name="frame.len"\s+([^>]+)/>', filedump):
result = match.group(1)
do_something(result)
wow, que Regex est horrible! À partir de 2016, il existe un .getatTtribute () code> méthode pour chaque Domelement code> qui rend les choses un peu plus faciles, mais vous devez toujours faire itération à travers les éléments. l = []
for e in elements:
if e.hasAttribute('name') and e.getAttribute('name') == 'field.len':
l.append(e)
Pour ajouter à cette question, le XML est de 300 Mo. J'ai manqué de mémoire la dernière fois que j'ai essayé de l'analyser. Toute suggestion de meilleures bibliothèques de style SAX?
Eh bien,
xml.dom.minidom code> est un analyseur DOM qui doit lire l'ensemble du document en mémoire. Pas parce que ce n'est pas assez bon, mais parce que c'est ce que font les analyseurs Dom. Donc, je ne sais pas ce que vous entendez par "meilleures bibliothèques de style saxo". Quel est mauvais surxml.sax code>, l'analyseur SAX standard fourni avec Python?Après 5000 paquets (300 Mo), essayer de charger le XML bloque mon ordinateur. Sur ces 300 Mo de données, j'ai juste besoin d'environ 10 Ko qui est réparti sur le document. Existe-t-il un moyen plus efficace de traverser le XML que LXML et une bibliothèque plus simple que saxo?