2013-01-14 75 views
8

Tôi có một phần tử XML <root> với một số thuộc tính. Tôi đã sử dụng gói ElementTree.Lấy tên và giá trị thuộc tính từ ElementTree

Sau khi tôi đã phân tích cú pháp một cây từ tệp xml, tôi nhận được tài liệu gốc, nhưng tôi muốn nhận thuộc tính được yêu cầu hoặc thậm chí toàn bộ danh sách thuộc tính.

<root a="1" b="2" c="3"> 
    </blablabla> 
</root> 

Làm cách nào để lấy tất cả tên và giá trị thuộc tính cho phần tử <root> với ElementTree?

Trả lời

13

Mỗi Element có thuộc tính .attrib là từ điển; chỉ cần sử dụng nó mapping methods hỏi nó cho các phím hoặc các giá trị của nó:

for name, value in root.attrib.items(): 
    print '{0}="{1}"'.format(name, value) 

hoặc

for name in root.attrib: 
    print '{0}="{1}"'.format(name, root.attrib[name]) 

hoặc sử dụng .values() hoặc bất kỳ phương pháp khác có sẵn trên một con trăn dict.

Để có được một thuộc tính cá nhân, sử dụng các tiêu chuẩn subscription syntax:

print root.attrib['a'] 
4

Các attrib thuộc tính của một phần tử ElementTree (như gốc được trả về bởi getroot) là một cuốn từ điển. Vì vậy, bạn có thể làm, ví dụ:

from xml.etree import ElementTree 
tree = ElementTree.parse('test.xml') 
root = tree.getroot() 
print root.attrib 

đó sẽ ra, ví dụ bạn

{'a': '1', 'b': '2', 'c': '3'} 
1

Một số vòng lặp đẹp bạn có thể sử dụng nó sẽ nhận được cho mỗi yếu tố của xmlObject đó là thẻ, văn bản và thuộc tính nó sẽ hoạt động cho 2 cấp XML, đây không phải là cách tốt nhất để lặp lại nhưng nó có thể hữu ích cho những điều đơn giản ...

for headTag in xmlObject.getchildren(): 
    print headTag.tag, headTag.text, headTag.attrib 
    for bodyTag in headTag.getchildren(): 
     print "\t", bodyTag.tag, bodyTag.text, bodyTag.attrib 
Các vấn đề liên quan