2012-12-02 30 views
12

Tôi gặp phải lỗi phân cách đường dẫn trong python 2.6.1. Tôi đã không tìm thấy vấn đề này với phiên bản python 2.7.2, nhưng tiếc là tôi chỉ cần điều này trong 2.6.1. Có cách nào khác để đạt được điều tương tự không? :(Python 2.6.1: dấu phân cách đường dẫn dự kiến ​​([)

mã của tôi: -

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 là: -

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

Điều này sẽ làm là nó sẽ loại bỏ các xml chỉ nếu username = tên Cảm ơn trước cho.

Trả lời

16

Bạn đang sử dụng biểu thức XPath, không được hỗ trợ bởi phiên bản ElementTree được bao gồm trong Python 2.6.Bạn sẽ cần phải lọc thuộc tính theo cách thủ công, sau .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

Có, bạn đã đúng. –

Các vấn đề liên quan