Topic: Elementtree menu annidato  (Letto 1137 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline skystar

  • python unicellularis
  • *
  • Post: 1
  • Punti reputazione: 0
    • Mostra profilo
Elementtree menu annidato
« il: Luglio 24, 2011, 15:04 »
Ciao a tutti dall'ultimo arrivato.....e come tale ho subito un quesito che per uno nuovo come me è un muro invalicabile e magari farà sorridere gli esperti  ;) .

Ho il seguente file xml:

[codice]
<addons>
   <Plugins>      
      <files><filename>plugin1.zip</filename><desc>Plugin1 </desc><dir>Plugins</dir><size>100</size><check>1</check></files>
      <files><filename>Plugin2.zip</filename><desc>Plugin2</desc><dir>Plugins</dir><size>15</size><check>1</check></files>
   </Plugins>
   <Settings>
      <System>
         <files><filename>System1.zip</filename><desc>Sistema1</desc><dir>System</dir><size>65</size><check>0</check></files>
         <files><filename>System2.zip</filename><desc>Sistema2</desc><dir>System</dir><size>40</size><check>0</check></files>
         
      </System>
      <Video>
         <files><filename>Video1.zip</filename><desc>Video player</desc><dir>e2Settings</dir><size>3200</size><check>0</check></files>
         <files><filename>Video2.zip</filename><desc>Video Codec</desc><dir>e2Settings</dir><size>510</size><check>0</check></files>
      </Video>
   </Settings>      
   <Games>
   </Games>
</addons>
[/codice]

Devo creare un menu interattivo che all'apertura mi presenti i tag in root che sono i seguenti:
Plugins
Settings
Games

Scegliendo Plugins dovrebbe darmi la lista dei figli mentre se scelgo Settings dovrei avere un ulteriore livello di scelta avendo questo tag dei figli che a sua volta hanno figli.
In poche parole dovrei fare un parsing del file interattivo fino ad arrivare a quei tag privi di figli dove invece di scendere al nodo sotto (che non c'è) vado a lanciare il download del file in base alle proprietà del nodo.

Per ora ho utilizzato questo codice:

[codice]
from xml.etree.ElementTree import ElementTree
tree = ElementTree(file='C:/addons.xml')
elem = tree.getroot()
for child in elem:
    print child
[/codice]

Questo codice mi da la lista

Plugins
Settings
Games

.....ma non riesco a capire come muovermi nei nodi sotto a seconda della scelta fatta (...se scelgo Settings come faccio a chiedere chi sono i figli di Settings......insomma data una scelta da utilizzare come input)

Ovviamente se va modificato il file xml lo posso fare tranquillamente.

Ciao e grazie!!

Offline Bakuriu

  • python sapiens sapiens
  • ******
  • Post: 2.267
  • Punti reputazione: 2
  • Katon, Goukakyuu no jutsu!
    • Mostra profilo
    • Jack's Blackboard - Il mio blog
Re: Elementtree menu annidato
« Risposta #1 il: Luglio 25, 2011, 13:46 »
Se non sbaglio basta che iteri sui figli:

[codice]for child in tree:
    for grandchild in child:
        #etc
[/codice]

Comunque controlla la documentazione di elementtree.