Hướng dẫn phân tích cú pháp XML trong Python: Đọc ví dụ về tệp xml (Minidom, ElementTree)

Mục lục:

Anonim

XML là gì?

XML là viết tắt của eXtensible Markup Language. Nó được thiết kế để lưu trữ và vận chuyển lượng dữ liệu vừa và 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 tài liệu XML. Để phân tích cú pháp 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ẽ thấy cách chúng ta có thể sử dụng lớp XML minidom trong Python để tải và phân tích cú pháp tệp XML.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu-

  • Cách phân tích cú pháp XML bằng cách sử dụng minidom
  • Cách tạo nút XML
  • Cách phân tích cú pháp XML bằng ElementTree

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) Bên trong tệp, chúng ta có thể thấy tên, họ, nhà và lĩnh vực chuyên môn (SQL, Python, Thử nghiệm và Kinh doanh)

Bước 2) Khi chúng tôi đã phân tích cú pháp tài liệu, chúng tôi sẽ in ra "tên nút" của thư mục gốc của tài liệu và " tên thẻ của đứa 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ề nhân viên như tên, họ, nhà, chuyên môn, v.v.
  • Chúng tôi sử dụng hàm phân tích cú pháp trên minidom XML để tải và phân tích cú pháp tệp XML
  • Chúng ta có doc biến và doc nhận 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 print
  • 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

Ghi 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. Trong trường hợp nếu bạn không quen thuộc với các loại quy ước đặt tên.

Bước 3) Chúng ta cũng có thể gọi danh sách các thẻ XML từ tài liệu XML và được 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 chuyên môn thay đổi, từ đó chúng tôi sẽ trích xuất tất cả 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 qua từng thẻ kỹ năng
  • Chạy mã- Nó sẽ cung cấp danh sách bốn kỹ năng

Cách tạo 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" và sau đó 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 một thẻ mới "BigData" trong tệp XML của mình.

  1. Bạn phải viết mã để thêm thuộc tính mới (BigData) vào thẻ XML hiện có
  2. Sau đó, bạn phải in thẻ XML với các thuộc tính mới được nối với 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 Elements"
  • Mã này sẽ tạo một thẻ kỹ năng mới cho thuộc tính mới "Dữ liệu lớn" của chúng tôi
  • 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

Ví dụ Python 2

nhập xml.dom.minidomdef main ():# sử dụng hàm parse () để tải và phân tích cú pháp tệp XMLdoc = xml.dom.minidom.parse ("Myxml.xml");# in ra nút tài liệu và tên của thẻ con đầu tiênprint doc.nodeNameprint doc.firstChild.tagName# lấy danh sách các thẻ XML từ tài liệu và in từng thẻ mộtchuyên môn = doc.getElementsByTagName ("chuyên môn")in "% d chuyên môn:"% chuyên môn.lengthđể có kỹ năng chuyên môn:print skill.getAttribute ("name")# tạo một thẻ XML mới và thêm nó vào tài liệunewexpertise = doc.createElement ("chuyên môn")newexpertise.setAttribute ("tên", "BigData")doc.firstChild.appendChild (newexpertise)in ""chuyên môn = doc.getElementsByTagName ("chuyên môn")in "% d chuyên môn:"% chuyên môn.lengthđể có kỹ năng chuyên môn:print skill.getAttribute ("name")nếu tên == "__main__":chủ yếu();

Ví dụ Python 3

nhập xml.dom.minidomdef main ():# sử dụng hàm parse () để tải và phân tích cú pháp tệp XMLdoc = xml.dom.minidom.parse ("Myxml.xml");# in ra nút tài liệu và tên của thẻ con đầu tiênprint (doc.nodeName)print (doc.firstChild.tagName)# lấy danh sách các thẻ XML từ tài liệu và in từng thẻ mộtchuyên môn = doc.getElementsByTagName ("chuyên môn")print ("% d chuyên môn:"% chuyên môn.length)để có kỹ năng chuyên môn:print (skill.getAttribute ("name"))# tạo một thẻ XML mới và thêm nó vào tài liệunewexpertise = doc.createElement ("chuyên môn")newexpertise.setAttribute ("tên", "BigData")doc.firstChild.appendChild (newexpertise)print ("")chuyên môn = doc.getElementsByTagName ("chuyên môn")print ("% d chuyên môn:"% chuyên môn.length)để có kỹ năng chuyên môn:print (skill.getAttribute ("name"))nếu __name__ == "__main__":chủ yếu();

Cách phân tích cú pháp XML bằng ElementTree

ElementTree là một API để thao tác với XML. ElementTree là cách dễ dàng để xử lý các tệp XML.

Chúng tôi đang sử dụng tài liệu XML sau làm dữ liệu mẫu:

SQLPython

Đọ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 ETtree = ET.parse('items.xml')root = tree.getroot()# all items dataprint('Expertise Data:')for elem in root:for subelem in elem:print(subelem.text)
đầu ra:
Expertise Data:SQLPython

Tóm lược:

Python cho phép bạn phân tích cú pháp toàn bộ tài liệu XML cùng một lúc chứ không chỉ một dòng tại một thời điểm. Để phân tích cú pháp tài liệu XML, bạn cần có toàn bộ tài liệu trong bộ nhớ.

  • Để phân tích cú pháp tài liệu XML
    • Nhập xml.dom.minidom
    • Sử dụng hàm "phân tích cú pháp" để phân tích cú pháp 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 mã (= doc.getElementsByTagName ("tên của các thẻ xml")
  • Để tạo và thêm thuộc tính mới trong tài liệu XML
    • Sử dụng hàm "createElement"