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

Đây là tất cả các chủ đề được đề cập trong hướng dẫn này

XML là gì?
Mô-đun phân tích cú pháp XML của Python
xml. cây etree. Mô-đun ElementTree

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 Python

Python 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 ElementTree

Mô-đ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ỗi

ElementTree 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]]


ĐẦU RA. meta

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


VÍ DỤ

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âm

Thư 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’}
giá {}
mô tả {}
lượng calo {}

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
$2. 5
Hai ly tương ớt
553

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ử


VÍ DỤ

import xml.etree.ElementTree as ET
mytree = ET.parse['sample.xml']
myroot = mytree.getroot[]
0

ĐẦU RA

Vô dụng $2. 5
Giấy Dosa $2. 7
Upma $3. 65
Tắm Bisi Bele $4. 50
Tắm Kesari $1. 95

Đầ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 XML

Cá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 XML

Ví 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ểu

Mô-đ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âm

Sau 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
Giấy Dosa
Upma
Bồn tắm Bisi Bele
Bồn tắm Kesari

Để 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

Chủ Đề