2012-12-02 11 views
12

Python 2.6.1でパス区切りエラーが発生しました。私はpython 2.7.2のバージョンでこの問題を発見していませんが、残念ながら私は2.6.1でこれが必要です。同じことを達成する別の方法がありますか? :(Python 2.6.1:予想パス区切り([]

私のコードは: -

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> 

が、それはXMLに削除されますされている場合にのみ、ユーザ名=ユーザ名を事前に感謝します。あなたの貴重な時間

答えて

16

ElementTreeバージョンのPython 2.6でサポートされていないXPath式を使用しています。の後、属性を手動でフィルタリングする必要があります:

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

はい、あなたは正しいです。 –