Python Tệp XML – Cách đọc, viết và phân tích cú pháp
XML là gì?
XML là viết tắt của Ngôn ngữ đánh dấu có thể mở rộng. Nó được thiết kế để lưu trữ và vận chuyển lượng dữ liệu từ nhỏ đến trung bình và được sử dụng rộng rãi để chia sẻ thông tin có cấu trúc.
Python cho phép bạn phân tích cú pháp và sửa đổi các tài liệu XML. Để phân tích tài liệu XML, bạn cần có toàn bộ tài liệu XML trong bộ nhớ. Trong hướng dẫn này, chúng ta sẽ xem cách chúng ta có thể sử dụng lớp XML minidom trong Python để tải và phân tích các tệp XML.
Cách phân tích cú pháp XML bằng cách sử dụng minidom
Chúng tôi đã tạo một tệp XML mẫu mà chúng tôi sẽ phân tích cú pháp.
Bước 1) Tạo tệp XML mẫu
Bên trong tệp, chúng ta có thể thấy họ, tên, quê quán và lĩnh vực chuyên môn (SQL, Python, Thử nghiệm và Kinh doanh)
Bước 2) Sử dụng hàm phân tích cú pháp để tải và phân tích tệp XML
Khi chúng tôi đã phân tích tài liệu, chúng tôi sẽ in ra "Tên nút" gốc của tài liệu và “tên thẻ con đầu lòng”. Tên thẻ và tên nút là các thuộc tính tiêu chuẩn của tệp XML.
- Nhập mô-đun xml.dom.minidom và khai báo tệp phải được phân tích cú pháp (myxml.xml)
- Tệp này mang một số thông tin cơ bản về một nhân viên như tên, họ, quê quán, chuyên môn, v.v.
- Chúng ta sử dụng hàm phân tích cú pháp trên XML minidom để tải và phân tích tệp XML
- Chúng ta có biến doc và doc lấy kết quả của hàm phân tích cú pháp
- Chúng tôi muốn in tên nút và tên thẻ con từ tệp, vì vậy chúng tôi khai báo nó trong hàm in
- Chạy mã- Nó in ra tên nút (#document) từ tệp XML và tên thẻ con đầu tiên (nhân viên) từ tệp XML
Chú thích:
Tên nút và tên thẻ con là tên hoặc thuộc tính tiêu chuẩn của một dom XML.
Bước 3) Gọi danh sách các thẻ XML từ tài liệu XML và in ra
Tiếp theo, chúng ta cũng có thể gọi danh sách các thẻ XML từ tài liệu XML và in ra. Ở đây chúng tôi đã in ra bộ kỹ năng như SQL, Python, Kiểm tra và Kinh doanh.
- Khai báo biến chuyên môn, từ đó ta sẽ trích ra toàn bộ tên chuyên môn mà nhân viên đang có
- Sử dụng hàm tiêu chuẩn dom có tên “getElementsByTagName”
- Điều này sẽ nhận được tất cả các yếu tố có tên là kỹ năng
- Khai báo vòng lặp trên mỗi thẻ kỹ năng
- Chạy mã- Nó sẽ đưa ra danh sách bốn kỹ năng
Cách viết nút XML
Chúng ta có thể tạo một thuộc tính mới bằng cách sử dụng hàm “createElement” rồi nối thêm thuộc tính hoặc thẻ mới này vào các thẻ XML hiện có. Chúng tôi đã thêm thẻ mới “BigData” vào tệp XML của mình.
- Bạn phải viết mã để thêm thuộc tính mới (BigData) vào thẻ XML hiện có
- Sau đó, bạn phải in ra thẻ XML với các thuộc tính mới được gắn vào thẻ XML hiện có
- Để thêm một XML mới và thêm nó vào tài liệu, chúng tôi sử dụng mã “doc.create phần tử”
- Mã này sẽ tạo một thẻ kỹ năng mới cho thuộc tính mới của chúng tôi “Dữ liệu lớn”
- Thêm thẻ kỹ năng này vào tài liệu con đầu tiên (nhân viên)
- Chạy mã - thẻ mới “dữ liệu lớn” sẽ xuất hiện cùng với danh sách chuyên môn khác
Ví dụ về trình phân tích cú pháp XML
Python 2 Ví dụ
import xml.dom.minidom def main(): # use the parse() function to load and parse an XML file doc = xml.dom.minidom.parse("Myxml.xml"); # print out the document node and the name of the first child tag print doc.nodeName print doc.firstChild.tagName # get a list of XML tags from the document and print each one expertise = doc.getElementsByTagName("expertise") print "%d expertise:" % expertise.length for skill in expertise: print skill.getAttribute("name") #Write a new XML tag and add it into the document newexpertise = doc.createElement("expertise") newexpertise.setAttribute("name", "BigData") doc.firstChild.appendChild(newexpertise) print " " expertise = doc.getElementsByTagName("expertise") print "%d expertise:" % expertise.length for skill in expertise: print skill.getAttribute("name") if name == "__main__": main();
Python 3 Ví dụ
import xml.dom.minidom def main(): # use the parse() function to load and parse an XML file doc = xml.dom.minidom.parse("Myxml.xml"); # print out the document node and the name of the first child tag print (doc.nodeName) print (doc.firstChild.tagName) # get a list of XML tags from the document and print each one expertise = doc.getElementsByTagName("expertise") print ("%d expertise:" % expertise.length) for skill in expertise: print (skill.getAttribute("name")) # Write a new XML tag and add it into the document newexpertise = doc.createElement("expertise") newexpertise.setAttribute("name", "BigData") doc.firstChild.appendChild(newexpertise) print (" ") expertise = doc.getElementsByTagName("expertise") print ("%d expertise:" % expertise.length) for skill in expertise: print (skill.getAttribute("name")) if __name__ == "__main__": main();
Cách phân tích cú pháp XML bằng ElementTree
ElementTree là một API để thao tác XML. ElementTree là cách dễ dàng để xử lý các tệp XML.
Chúng tôi sử dụng tài liệu XML sau đây làm dữ liệu mẫu:
<data> <items> <item name="expertise1">SQL</item> <item name="expertise2">Python</item> </items> </data>
Đọc XML bằng ElementTree:
trước tiên chúng ta phải nhập mô-đun xml.etree.ElementTree.
import xml.etree.ElementTree as ET
Bây giờ hãy tìm nạp phần tử gốc:
root = tree.getroot()
Sau đây là mã hoàn chỉnh để đọc dữ liệu xml ở trên
import xml.etree.ElementTree as ET tree = ET.parse('items.xml') root = tree.getroot() # all items data print('Expertise Data:') for elem in root: for subelem in elem: print(subelem.text)
đầu ra:
Expertise Data: SQL Python
Tổng kết
Python cho phép bạn phân tích toàn bộ tài liệu XML cùng một lúc chứ không chỉ một dòng một lần. Để phân tích tài liệu XML, bạn cần có toàn bộ tài liệu trong bộ nhớ.
- Để phân tích tài liệu XML
- Nhập xml.dom.minidom
- Sử dụng hàm “parse” để phân tích tài liệu ( doc=xml.dom.minidom.parse (tên tệp);
- Gọi danh sách các thẻ XML từ tài liệu XML bằng cách sử dụng mã (=doc.getElementsByTagName(“tên của thẻ xml”)
- Để tạo và thêm thuộc tính mới trong tài liệu XML
- Sử dụng chức năng “createElement”