Trong bài viết này, chúng ta sẽ tìm hiểu cách phân tích cú pháp, khám phá, sửa đổi và điền một tệp XML bằng Python ElementTree. Chúng ta sẽ hiểu tệp XML là gì và định dạng dữ liệu của nó, tại sao nó được sử dụng và cách khám phá cấu trúc cây của nó
XML là gì?
XML là viết tắt của “Ngôn ngữ đánh dấu mở rộng”. Nó chủ yếu được sử dụng trong các trang web, nơi dữ liệu có cấu trúc cụ thể và được hiểu một cách linh hoạt bởi khung XML
XML tạo ra một cấu trúc dạng cây dễ diễn giải và hỗ trợ hệ thống phân cấp. Bất cứ khi nào một trang tuân theo XML, nó có thể được gọi là tài liệu XML
Tài liệu XML có các phần khác nhau được gọi là phần tử. Phần tử bao gồm thẻ bắt đầu và thẻ kết thúc và có thể có nhiều phần tử hơn trong đó. Các phần tử bên trong này được gọi là các phần tử con. Luôn có một phần tử cấp cao nhất được gọi là gốc của tài liệu
Các phần tử có các thuộc tính có một số tên và giá trị của nó. Để hiểu nó một cách tốt hơn, hãy xem xét tệp xml sau
1
2008
141100
4
2011
59900
68
2011
13600
68
2011
13600
Trong tài liệu này.
is the root tag
Thẻ gốc có thêm các phần tử con vì
have an attribute named as name
element also have further child elements as , , and .
Trong tài liệu trên, chúng ta có thể thấy tài liệu XML là gì và nó lưu trữ dữ liệu như thế nào. Trong các ngôn ngữ lập trình khác nhau, nó được xử lý theo những cách khác nhau. Python có một bản dựng trong thư viện ElementTree, có chức năng đọc và thao tác các tệp XML
Trước hết chúng ta phải nhập ElementTree. Đó là một thực tế phổ biến để sử dụng bí danh ET
import xml.etree.ElementTree as ET
Phân tích cú pháp dữ liệu XMLTrong tài liệu của chúng tôi, chúng tôi có thông tin quốc gia trong nhiều thẻ quốc gia và trong thẻ quốc gia, chúng tôi cũng có một số chi tiết như thứ hạng, năm, hàng xóm và GDP/Ps. Trước hết, chúng ta phải đọc tệp xml của mình bằng ElementTree hay còn gọi là ET. Và sau đó chúng ta sẽ đọc phần tử gốc của nó với hàm getroot[]
tree = ET.parse[‘your path to file/countries.xml’]
root = tree.getroot[]
Chúng ta có thể kiểm tra tên thẻ gốc là
root.tagoutput: 'countries'root.attrib
{}
Thẻ của phần tử gốc là quốc gia và nó không có bất kỳ thuộc tính nào. Bây giờ hãy tìm những gì có trong thẻ gốc
for child in root:
print[child.tag, child.attrib]output:country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}
country {'name': 'Canada'}
Để kiểm tra tất cả các phần tử trong phần tử gốc của chúng tôi, chúng tôi sẽ kiểm tra nó như
[elem.tag for elem in root.iter[]]output:['countries',
'country',
'rank',
'year',
'gdppc',
'neighbor',
'country',
'rank',
'year',
'gdppc',
'neighbor',
'country',
'rank',
'year',
'gdppc',
'neighbor',
'country',
'rank',
'year',
'gdppc',
'neighbor']
Để lưu trữ mọi thông tin quốc gia trong danh sách Python, chúng tôi sẽ làm điều đó như
countries_list=[]
for child in root:
countryName,neighborName, rank, gdppc, year=’’,’’,’’,’’,’’
countryName=child.attrib[‘name’]
for eachChild in child.getchildren[]:
if[eachChild.tag==’neighbor’]:
#neighbor do not have text, instead it have attribute
neighborName=eachChild.attrib[‘name’]
if[eachChild.tag==’rank’]:
rank=eachChild.text
if[eachChild.tag==’gdppc’]:
gdppc=eachChild.text
else:
year=eachChild.text
obj={
'CountryName’:countryName,
’Rank’:rank,
’Neighbor’:neighborName,
’GDPPC’:gdppc,
’Year’:year
}
countries_list.append[obj]
Trong ví dụ mã này, chúng tôi đã trích xuất mọi thông tin quốc gia từ phần tử quốc gia, thẻ con và thuộc tính của quốc gia đó
countries_listoutput[{'CountryName': 'Liechtenstein',
'Rank': '1',
'Neighbor': 'Austria',
'GDPPC': '141100',
'Year': None},
{'CountryName': 'Singapore',
'Rank': '4',
'Neighbor': 'Malaysia',
'GDPPC': '59900',
'Year': None},
{'CountryName': 'Panama',
'Rank': '68',
'Neighbor': 'Costa Rica',
'GDPPC': '13600',
'Year': None},
{'CountryName': 'Canada',
'Rank': '68',
'Neighbor': 'United States',
'GDPPC': '13600',
'Year': None}]
Đây là đầu ra cuối cùng của chúng tôi trong danh sách Python mà chúng tôi đã trích xuất từ tài liệu xml
ElementTree là một thư viện Python quan trọng để xử lý và thao tác các tệp XML trong Python. ElementTree chia nhỏ tài liệu XML theo cấu trúc cây dễ làm việc theo lập trình