Y at-il un moyen plus pythonique pour accéder aux éléments enfants des parents qui utilisent lxml

StackOverflow https://stackoverflow.com/questions/3106658

  •  29-09-2019
  •  | 
  •  

Question

Je piquer des documents XBRL essayant d'obtenir ma tête comment extraire et utiliser efficacement les données. Une chose que je me bats avec fait que je l'utilise correctement les informations de contexte. Ci-dessous un extrait de l'un des documents que je suis jouer avec (ce qui est du dernier 10-K de Mattel)

Je veux pouvoir efficacement recueillir les paires de valeurs de clé de contexte, car ils sont importants pour aider à aligner les données « réelles » » Voici un exemple d'un élément de contexte

- <context id="eol_PE6050----0910-K0010_STD_0_20091231_0">
  - <entity>
     <identifier scheme="http://www.sec.gov/CIK">0000063276</identifier> 
   </entity>
  - <period>
   <instant>2009-12-31</instant> 
   </period>
   </context>

Quand j'ai commencé cela, je pense que s'il y avait une relation parent-enfant, je devrais être en mesure d'obtenir les attributs, les clés, les valeurs et les textes de tous les enfants directement à partir de l'application d'une méthode (?) Au parent. Mais les enfants conservent leur indépendance si elles se trouvent du parent. Ce que je veux dire est que si les enfants ont des attributs, des clés, des valeurs et ou le texte de ces constructions ne peuvent pas être directement accessibles à partir du parent au lieu que vous devez déterminer / identifier les enfants et des enfants accèdent aux données ou métadonnées nécessaires.

Je ne suis pas complètement certain pourquoi ce bloc de code est un bon point de départ:

 from lxml import etree
 test_tree=etree.parse(r'c:\temp\test_xml\mat-20091231.xml')
 tree_list=[p for p in test_tree.getiterator() 

donc mon TREE_LIST une liste des éléments qui ont été déterminés à exister dans mon fichier xml
Parce qu'il n'y avait que 664 articles dans mon TREE_LIST j'ai fait l'hypothèse très mauvaise que tous les éléments d'un parent ont été englobés dans le parent donc je continué à essayer d'accès à l'entité, la période et instantanée en faisant référence seulement ces éléments (et non leurs enfants)

for each in tree_list:
    if 'context' in each.tag:
        contextlist.append(each)

C'est que je continuais à appliquer des méthodes différentes pour les éléments de la contextlist et suis vraiment frustré. Enfin pendant que je rédigeais la question que je tentais d'obtenir une aide pour comprendre quelle méthode me donnerait l'entité et la période que je viens décidé d'essayer

children=[c for c in contextlist[0].iterchildren()]

pour que mes enfants liste a tous les enfants du premier élément de mon contextlist

L'un des enfants est l'élément de l'entité, l'autre est l'élément de période

Maintenant, il devrait être que chacun de ces enfants ont un enfant, l'élément de l'entité a un élément enfant identifiant et l'élément de période a un élément enfant instantané Cela devient beaucoup plus compliqué que cela semblait ce matin.

Je dois connaître les détails qui sont signalés par les éléments de contexte pour évaluer correctement et fonctionnent sur les données réelles. Il semble que je dois tester chacun des enfants des éléments de contexte est-il un moyen plus rapide et plus efficace pour obtenir ces valeurs? Reformulée, est-il un moyen d'avoir un élément et créer une structure de données qui contient tous ses enfants et petits-enfants, etc., sans avoir à faire un montant juste d'essayages d'autre des déclarations

Une fois que je les ai, je peux commencer à construire un des éléments de données dictionnaire de données et d'attribuer à des entrées particulières en fonction du contexte. Donc, obtenir les éléments de contexte efficace et complètement est essentielle à ma tâche.

Était-ce utile?

La solution

Utilisation de l'interface élément d'arbre (qui lxml également des supports),

scroll top