2012-12-02 2 views
12

파이썬 2.6.1에서 경로 구분자 오류가 발생합니다. 파이썬 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

네, 맞습니다. –