2012-12-02 23 views
12

Ricevo un errore di separatore di percorso in python 2.6.1. Non ho trovato questo problema con la versione python 2.7.2, ma sfortunatamente ho bisogno di questo solo in 2.6.1. C'è un altro modo per ottenere lo stesso? :(Python 2.6.1: separatore di percorso previsto ([)

il mio codice: -

import xml.etree.ElementTree as ET #version 1.2.6 
import sys 

class usersDetail(object): 

    def __init__(self, users=None): 
     self.doc = ET.parse("test.xml") 
     self.root = self.doc.getroot() 

    def final_xml(self,username): 
     r = self.root.find("user[@username='user1']") #not working in 2.6.1 :(
     self.root.remove(r) 
     print r 
     tree = ET.ElementTree(self.root) 
     tree.write("msl.xml") 

if __name__ == '__main__': 
    parser = usersDetail() 
    parser.final_xml("user1") 

Test.xml è: -

<?xml version="1.0"?> 
<users> 
<user afp="yes" cifs="yes" username="user1" volume="vol" webdev="yes" /></user> 
</users> 

Che cosa questo farà si che rimuoverà l'XML solo se username = nome utente Grazie in anticipo per. tempo prezioso

risposta

16

Si sta utilizzando un'espressione XPath, che non è supportata dalla versione ElementTree inclusa in Python 2.6. È necessario filtrare manualmente l'attributo, dopo un .findall():

def final_xml(self,username): 
    users = self.root.findall("user") 
    for user in users: 
     if user.attrib.get('username') == 'user1': 
      break 
    else: 
     raise ValueError('No such user') 

    # `user` is now set to the correct element 
    self.root.remove(user) 
    print user 
    tree = ET.ElementTree(self.root) 
    tree.write("msl.xml") 
+1

Sì, hai ragione. –

Problemi correlati