Làm cách nào để làm việc với các tệp XML trong Python?
Chúng tôi thường yêu cầu phân tích cú pháp dữ liệu được viết bằng các ngôn ngữ khác nhau. Lập trình Python cung cấp nhiều thư viện để phân tích hoặc phân tách dữ liệu được viết bằng các ngôn ngữ khác. Trong Hướng dẫn phân tích cú pháp XML Python này, bạn sẽ học cách phân tích cú pháp XML bằng Python Show
Đây là tất cả các chủ đề được đề cập trong hướng dẫn này XML là gì? xml. nhà thờ. Mô-đun tối thiểu Vậy hãy bắt đầu. . ) XML là gì?XML là viết tắt của Ngôn ngữ đánh dấu mở rộng. Nó tương tự như HTML về hình thức, nhưng XML được sử dụng để trình bày dữ liệu, trong khi HTML được sử dụng để xác định dữ liệu nào đang được sử dụng. XML được thiết kế riêng để gửi và nhận dữ liệu qua lại giữa máy khách và máy chủ. Hãy xem ví dụ sau VÍ DỤ Idly $2.5 Two idly's with chutney 553 Paper Dosa $2.7 Plain paper dosa with chutney 700 Upma $3.65 Rava upma with bajji 600 Bisi Bele Bath $4.50 Bisi Bele Bath with sev 400 Kesari Bath $1.95 Sweet rava with saffron 950 Ví dụ trên cho thấy nội dung của một tệp mà tôi đã đặt tên là 'Mẫu. xml' và tôi sẽ sử dụng tương tự trong hướng dẫn trình phân tích cú pháp Python XML này cho tất cả các ví dụ sắp tới Các mô-đun phân tích cú pháp XML của PythonPython cho phép phân tích cú pháp các tài liệu XML này bằng hai mô-đun cụ thể là xml. cây etree. Mô-đun ElementTree và Minidom (Triển khai DOM tối thiểu). Phân tích cú pháp có nghĩa là đọc thông tin từ một tệp và chia nó thành nhiều phần bằng cách xác định các phần của tệp XML cụ thể đó. Hãy tiếp tục để xem cách chúng ta có thể sử dụng các mô-đun này để phân tích cú pháp dữ liệu XML xml. cây etree. Mô-đun ElementTreeMô-đun này giúp chúng tôi định dạng dữ liệu XML theo cấu trúc cây, đây là biểu diễn tự nhiên nhất của dữ liệu phân cấp. Kiểu phần tử cho phép lưu trữ cấu trúc dữ liệu phân cấp trong bộ nhớ và có các thuộc tính sau Thuộc tínhMô tảTagĐó là một chuỗi đại diện cho loại dữ liệu được lưu trữAttributesBao gồm một số thuộc tính được lưu trữ dưới dạng từ điểnChuỗi văn bảnMột chuỗi văn bản có thông tin cần được hiển thịChuỗi đuôiCũng có thể có chuỗi đuôi nếu cần Phần tử conBao gồm một số phần tử con được lưu trữ dưới dạng chuỗiElementTree là một lớp bao bọc cấu trúc phần tử và cho phép chuyển đổi sang và từ XML. Bây giờ chúng ta hãy thử phân tích cú pháp tệp XML ở trên bằng mô-đun python Có hai cách để phân tích tệp bằng mô-đun 'ElementTree'. Đầu tiên là sử dụng hàm parse() và thứ hai là hàm fromstring(). Hàm parse() phân tích cú pháp tài liệu XML được cung cấp dưới dạng tệp trong khi đó, fromstring phân tích cú pháp XML khi được cung cấp dưới dạng chuỗi i. e trong ba dấu ngoặc kép Sử dụng hàm parse()Như đã đề cập trước đó, hàm này lấy XML ở định dạng tệp để phân tích cú pháp. Hãy xem ví dụ sau VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot() Như bạn có thể thấy, điều đầu tiên bạn cần làm là nhập xml. cây etree. Mô-đun ElementTree. Sau đó, phương thức parse() phân tích cú pháp 'Sample. tệp xml'. Phương thức getroot() trả về phần tử gốc của 'Sample. xml' Khi bạn thực thi đoạn mã trên, bạn sẽ không thấy kết quả trả về nhưng sẽ không có lỗi cho biết mã đã thực thi thành công. Để kiểm tra phần tử gốc, bạn chỉ cần sử dụng câu lệnh in như sau VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot() print(myroot) ĐẦU RA. Đầu ra ở trên chỉ ra rằng phần tử gốc trong tài liệu XML của chúng tôi là 'siêu dữ liệu' Sử dụng hàm fromstring()Bạn cũng có thể sử dụng hàm fromstring() để phân tích dữ liệu chuỗi của mình. Trong trường hợp bạn muốn làm điều này, hãy chuyển XML của bạn dưới dạng một chuỗi trong ba dấu ngoặc kép như sau import xml.etree.ElementTree as ET data=''' Idly $2.5 Two idly's with chutney 553 ''' myroot = ET.fromstring(data) #print(myroot) print(myroot.tag) Đoạn mã trên sẽ trả về cùng một đầu ra như đoạn trước. Xin lưu ý rằng tài liệu XML được sử dụng dưới dạng chuỗi chỉ là một phần của 'Mẫu. xml' mà tôi đã sử dụng để hiển thị tốt hơn. Bạn cũng có thể sử dụng tài liệu XML hoàn chỉnh Bạn cũng có thể truy xuất thẻ gốc bằng cách sử dụng đối tượng 'tag' như sau VÍ DỤ print(myroot.tag) ĐẦU RA. metadata Bạn cũng có thể cắt đầu ra chuỗi thẻ bằng cách chỉ định phần nào của chuỗi bạn muốn xem trong đầu ra của mình VÍ DỤ print(myroot.tag[0:4])
Như đã đề cập trước đó, các thẻ cũng có thể có các thuộc tính từ điển. Để kiểm tra xem thẻ gốc có thuộc tính nào bạn có thể sử dụng đối tượng ‘attrib’ như sau
print(myroot.attrib) ĐẦU RA. {} Như bạn có thể thấy, đầu ra là một từ điển trống vì thẻ gốc của chúng ta không có thuộc tính Tìm hiểu khóa đào tạo Python của chúng tôi tại các thành phố/quốc gia hàng đầu Tìm các yếu tố quan tâmThư mục gốc cũng bao gồm các thẻ con. Để truy xuất con của thẻ gốc, bạn có thể sử dụng như sau VÍ DỤ print(myroot[0].tag) ĐẦU RA. món ăn Bây giờ, nếu bạn muốn truy xuất tất cả các thẻ con đầu tiên của thư mục gốc, bạn có thể lặp lại nó bằng cách sử dụng vòng lặp for như sau VÍ DỤ ________số 8ĐẦU RA mục {‘tên’. ‘bữa sáng’} Tất cả các mặt hàng được trả lại là thuộc tính con và thẻ của thực phẩm Để tách văn bản khỏi XML bằng ElementTree, bạn có thể sử dụng thuộc tính text. Ví dụ mình muốn lấy toàn bộ thông tin về món ăn đầu tiên thì sử dụng đoạn mã sau VÍ DỤ for x in myroot[0]: print(x.text) ĐẦU RA Nhàn rỗi Như bạn có thể thấy, thông tin văn bản của mục đầu tiên đã được trả về dưới dạng đầu ra. Bây giờ nếu bạn muốn hiển thị tất cả các mặt hàng với giá cụ thể của chúng, bạn có thể sử dụng phương thức get(). Phương thức này truy cập các thuộc tính của phần tử
import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot()0 ĐẦU RA Vô dụng $2. 5 Đầu ra ở trên hiển thị tất cả các mục cần thiết cùng với giá của từng mục. Sử dụng ElementTree, bạn cũng có thể sửa đổi các tệp XML Sửa đổi tệp XMLCác phần tử trình bày tệp XML của bạn có thể được thao tác. Để làm điều này, bạn có thể sử dụng hàm set(). Trước tiên chúng ta hãy xem làm thế nào để thêm một cái gì đó vào XML Thêm vào XMLVí dụ sau đây cho thấy cách bạn có thể thêm nội dung nào đó vào phần mô tả các mặt hàng VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot()1 Hàm write() giúp tạo một tệp xml mới và ghi đầu ra đã cập nhật vào cùng. Tuy nhiên, bạn cũng có thể sửa đổi tệp gốc bằng chức năng tương tự. Sau khi thực thi đoạn mã trên, bạn sẽ có thể thấy một tệp mới đã được tạo với kết quả được cập nhật Hình ảnh trên cho thấy mô tả đã sửa đổi của các mặt hàng thực phẩm của chúng tôi. Để thêm một thẻ con mới, bạn có thể sử dụng phương thức SubElement(). Ví dụ: nếu bạn muốn thêm một thẻ đặc sản mới vào mục đầu tiên Idly, bạn có thể làm như sau VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot()2 ĐẦU RA Như bạn có thể thấy, một thẻ mới đã được thêm vào dưới thẻ thực phẩm đầu tiên. Bạn có thể thêm thẻ vào bất cứ đâu bạn muốn bằng cách chỉ định chỉ số dưới trong dấu ngoặc []. Bây giờ chúng ta hãy xem cách xóa các mục bằng mô-đun này Xóa khỏi XMLĐể xóa các thuộc tính hoặc phần tử phụ bằng ElementTree, bạn có thể sử dụng phương thức pop(). Phương pháp này sẽ loại bỏ thuộc tính hoặc thành phần mong muốn mà người dùng không cần VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot()3 ĐẦU RA Hình ảnh trên cho thấy thuộc tính tên đã bị xóa khỏi thẻ mục. Để xóa thẻ hoàn chỉnh, bạn có thể sử dụng cùng phương thức pop() như sau VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot()4 ĐẦU RA Đầu ra cho thấy rằng phần tử phụ đầu tiên của thẻ thực phẩm đã bị xóa. Trong trường hợp bạn muốn xóa tất cả các thẻ, bạn có thể sử dụng hàm clear() như sau VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot()5 ĐẦU RA Khi đoạn mã trên được thực thi, con đầu tiên của thẻ thực phẩm sẽ bị xóa hoàn toàn bao gồm tất cả các thẻ con. Cho đến đây, chúng tôi đã sử dụng xml. cây etree. Mô-đun ElementTree trong hướng dẫn trình phân tích cú pháp Python XML này. Bây giờ chúng ta hãy xem cách phân tích cú pháp XML bằng Minidom xml. nhà thờ. Mô-đun tối thiểuMô-đun này về cơ bản được sử dụng bởi những người thành thạo DOM (mô-đun Đối tượng tài liệu). Các ứng dụng DOM thường bắt đầu bằng cách phân tích cú pháp XML thành DOM. trong xml. nhà thờ. minidom, điều này có thể đạt được theo những cách sau Sử dụng hàm parse()Phương pháp đầu tiên là sử dụng hàm parse() bằng cách cung cấp tệp XML để được phân tích cú pháp dưới dạng tham số. Ví dụ VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot()6 Khi bạn thực hiện điều này, bạn sẽ có thể chia nhỏ tệp XML và tìm nạp dữ liệu cần thiết. Bạn cũng có thể phân tích một tệp đang mở bằng chức năng này VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot()7 Biến lưu trữ tệp đã mở được cung cấp dưới dạng tham số cho hàm phân tích cú pháp trong trường hợp này Sử dụng Phương thức parseString()Phương thức này được sử dụng khi bạn muốn cung cấp XML để phân tích cú pháp dưới dạng chuỗi VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot()8 Bạn có thể phân tích cú pháp XML bằng bất kỳ phương pháp nào ở trên. Bây giờ chúng ta hãy thử tìm nạp dữ liệu bằng mô-đun này Tìm các yếu tố quan tâmSau khi tệp của tôi đã được phân tích cú pháp, nếu tôi cố gắng in nó, đầu ra được trả về sẽ hiển thị thông báo rằng biến lưu trữ dữ liệu được phân tích cú pháp là một đối tượng của DOM VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot()9 ĐẦU RA Truy cập các phần tử bằng GetElementsByTagName VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot() print(myroot)0 Nếu tôi cố tìm nạp phần tử đầu tiên bằng phương thức GetElementByTagName, tôi sẽ thấy đầu ra sau ĐẦU RA Xin lưu ý rằng chỉ một đầu ra đã được trả về vì tôi đã sử dụng chỉ số [0] để thuận tiện, sẽ bị xóa trong các ví dụ tiếp theo Để truy cập giá trị của các thuộc tính, tôi sẽ phải sử dụng thuộc tính giá trị như sau VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot() print(myroot)1 ĐẦU RA. bữa ăn sáng Để truy xuất dữ liệu có trong các thẻ này, bạn có thể sử dụng thuộc tính dữ liệu như sau VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot() print(myroot)2 ĐẦU RA. Giấy Dosa Bạn cũng có thể tách và truy xuất giá trị của các thuộc tính bằng thuộc tính giá trị VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot() print(myroot)3 ĐẦU RA. bữa ăn sáng Để in ra tất cả các mục có sẵn trong menu của chúng tôi, bạn có thể lặp qua các mục và trả về tất cả các mục VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot() print(myroot)4 ĐẦU RA Idly Để tính số món trên menu của chúng ta, bạn có thể sử dụng hàm len() như sau VÍ DỤ import xml.etree.ElementTree as ET mytree = ET.parse('sample.xml') myroot = mytree.getroot() print(myroot)5 ĐẦU RA. 5 Đầu ra chỉ định rằng menu của chúng tôi bao gồm 5 mục Điều này đưa chúng ta đến phần cuối của Hướng dẫn phân tích cú pháp XML Python này. Tôi hy vọng bạn đã hiểu mọi thứ rõ ràng Hãy chắc chắn rằng bạn thực hành càng nhiều càng tốt và hoàn nguyên kinh nghiệm của bạn. Có một câu hỏi cho chúng tôi? . Để biết thêm, bạn có thể đăng ký khóa học lập trình Master in Python của chúng tôi Để có kiến thức chuyên sâu về Python cùng với các ứng dụng khác nhau của nó, bạn có thể đăng ký Khóa học Python trực tiếp với sự hỗ trợ 24/7 và quyền truy cập trọn đời. Bạn có thể sử dụng XML với Python không?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 các 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ớ.
Làm cách nào để trích xuất dữ liệu từ XML bằng Python?Sau đó, chúng tôi sử dụng phương thức find, chuyển vào bộ chọn XPath, cho phép chúng tôi chỉ định phần tử mà chúng tôi đang cố trích xuất . Nếu không tìm thấy phần tử, trả về Không có. Nếu phần tử có thể được tìm thấy, thì chúng ta sẽ sử dụng. text trên đối tượng phần tử của chúng ta để lấy dữ liệu từ phần tử XML mong muốn.
Làm cách nào để nối tệp XML trong Python?Thêm chúng bằng hàm Subelement() và xác định thuộc tính văn bản của nó. . con=xml. Phần tử("nhân viên") nm = xml. Phần tử con(con, "tên") nm. văn bản = học sinh. . nhập xml. cây etree. ElementTree dưới dạng et cây = et. ElementTree(file='nhân viên. xml') gốc = cây. . nhập xml. cây etree. ElementTree dưới dạng et cây = et |