2012-12-02 13 views
12

Ich erhalte einen Pfadtrenner Fehler in Python 2.6.1. Ich habe dieses Problem mit Python 2.7.2 Version nicht gefunden, aber leider brauche ich das nur in 2.6.1. Gibt es einen anderen Weg, um das Gleiche zu erreichen? :(Python 2.6.1: erwarteter Pfad separator ([)

mein Code: -

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

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

Was dies tun, ist es die XML entfernen wird nur, wenn username = Benutzername Vielen Dank im Voraus für. Ihre wertvolle Zeit

Antwort

16

Sie verwenden einen XPath-Ausdruck, der nicht von der in Python 2.6 enthaltenen Version ElementTree unterstützt wird.Sie müssen das Attribut nach einemmanuell filtern:

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

Ja, Sie haben Recht. –