2012-12-02 17 views
12

Otrzymuję błąd separatora ścieżek w pythonie 2.6.1. Nie znalazłem tego problemu z wersją Pythona 2.7.2, ale niestety potrzebuję tego tylko w 2.6.1. Czy istnieje inny sposób osiągnięcia tego samego? :(Python 2.6.1: oczekiwany separator ścieżek ([)

mój kod: -

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 jest: -

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

Co to będzie zrobić, to usunie xml tylko wtedy, gdy użytkownik = nazwa Dzięki z góry za. Twój cenny czas:

Odpowiedz

16

Używasz wyrażenia XPath, które nie jest obsługiwane przez wersję ElementTree zawartą w Pythonie 2.6. Musisz filtrować atrybut ręcznie, po .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

Tak, masz rację. –