Viết chuỗi vào tệp xml Python

XML là viết tắt của eXtensible Markup Language là ngôn ngữ tự mô tả được W3C khuyến nghị. Nghe có vẻ giống HTML và nó cũng sử dụng các thẻ, nhưng các thẻ XML do người dùng tạo. Các nhà phát triển sử dụng ngôn ngữ đánh dấu này để xác định một bộ quy tắc ở dạng mà con người có thể đọc được và máy có thể đọc được. Các nhà phát triển nhúng XML để lưu trữ và truyền dữ liệu. Trong bài viết này, bạn sẽ biết về đọc và ghi một tệp XML bằng chương trình Python

Mô-đun cây nguyên tố

Trong bài viết này, chúng ta sẽ sử dụng module ElementTree Python để thực hiện đọc từ XML và ghi vào tệp XML. ElementTree là một mô-đun đáng chú ý và mới nhất có các cách đơn giản để xử lý và sử dụng các tệp XM. Vì vậy, để sử dụng cái này, trước tiên chúng ta phải nhập mô-đun này vào mã Python của mình. Chỉ vì các định dạng XML là các định dạng dữ liệu phân cấp tự nhiên, nên việc mô tả chúng theo cấu trúc dạng cây sẽ đơn giản hơn rất nhiều. Mô-đun cung cấp các phương thức tích hợp để biểu diễn toàn bộ tài liệu XML

Mặc dù nó được thêm dưới dạng thư viện Python tiêu chuẩn tích hợp sẵn, nhưng nếu bạn không thấy nó hoạt động, bạn có thể cài đặt nó bằng lệnh

pip install elementtree

Bây giờ chúng ta hãy tạo một tệp XML


	
		 Python 
		 Cyber Security 
	

Bây giờ, hãy đọc tệp XML bằng mã Python

import xml.etree.ElementTree as elt
tree = elt.parse('dict.xml')
r = tree.getroot()
# one specific item attribute
print('Fetching the attribute for first item:')
print(r[0][0].attrib)
# fetch every item’s attributes
print('\n Fetching all attributes using a loop:')
for elem in r:
    for subel in elem:
        print(subel.attrib)
# one specific item's data
print('\n Fetch data for second item:')
print(r[0][1].text)
print('\n Get all item\'s data frm XML:')
for elem in r:
    for subel in elem:
        print(subel.text)

đầu ra

Fetching the attribute for first item:
{'name': 'course1'}

 Fetching all attributes using a loop:
{'name': 'course1'}
{'name': 'course2'}

 Fetch data for second item:
 Cyber Security

 Get all item's data frm XML:
 Python
 Cyber Security

Giải trình

Ở đây, trước tiên chúng ta phải nhập xml. cây etree. Yếu TốCây. Hàm parse() sẽ tạo cấu trúc dạng cây. Bây giờ chúng ta cần đến phần tử gốc. Đối với điều này, chúng tôi đã sử dụng cây. phương thức getroot(). Bây giờ, sử dụng biến gốc 'r' đó, chúng ta có thể tìm nạp mục đầu tiên của thuộc tính. r[][] có hai chỉ số. Dấu ngoặc vuông đầu tiên cho chúng ta biết về phần tử con trong gốc (tại đây). Dấu ngoặc vuông thứ hai cho chúng tôi biết mục chúng tôi muốn tìm nạp. Bằng cách này (r[0][0]), chúng ta có thể tìm nạp cụ thể một phần tử và. attrib giúp chúng tôi tìm nạp thuộc tính của nó
Theo cách tương tự, chúng ta có thể sử dụng vòng lặp for để duyệt qua từng phần tử của gốc (r) và hiển thị các thuộc tính. Một lần nữa, nếu chúng ta muốn lấy một văn bản cụ thể của một mục, chúng ta có thể sử dụng kỹ thuật chỉ số dưới (r[0][1]) theo sau là một. chữ. Để đọc tất cả các văn bản trong các mục, chúng ta có thể sử dụng lại vòng lặp for

Cuối cùng viết tệp XML bằng Python

from xml.etree import ElementTree
tree = ElementTree.ElementTree()
root = ElementTree.Element("root-tree")
item = ElementTree.Element("item")
item.text = "Rs. 2600"
root.append(item)
tree._setroot(root)
tree.write("dict2.xml")

Điều này sẽ xuất ra

 Rs. 2600 

Giải trình

Đầu tiên chúng ta phải nhập ElementTree. Tiếp theo, chúng ta đã tạo một đối tượng (cây) của ElementTree bằng ElementTree. ElementTree(). Điều này sẽ tự động cho phép mã XML của chúng tôi đặt thẻ đóng sau mỗi phần tử chúng tôi xác định. cây nguyên tố. Element() giúp chúng ta tạo item đầu tiên. Sau này chúng ta sẽ định nghĩa nó là mục gốc bằng cách sử dụng phương thức _setroot(). Chúng ta sẽ lại sử dụng Element() để tạo một phần tử con bên trong nó. Bây giờ để phù hợp với văn bản bên trong phần tử con, chúng ta phải sử dụng mục. văn bản và đặt giá trị chuỗi bằng toán tử gán. Nối đối tượng mục con với đối tượng gốc và ghi tệp XML bằng phương thức write() và chuyển tên tệp dưới dạng chuỗi

Phần kết luận

Đọc và ghi dữ liệu vào XML trở thành một tiện ích cần thiết cho các nhà phát triển phần mềm vì XML giúp lưu trữ và truyền dữ liệu theo định dạng có tổ chức. Ngoài ra, việc truy cập các mục này trở nên dễ dàng

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



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Ụ

________số 8_______

ĐẦ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. đồ ă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Ụ

for x in myroot[0]:
     print(x.tag, x.attrib)

ĐẦU RA

Tên mục'. 'bữa sáng'}
giá {}
Sự miêu tả {}
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

vu vơ
$2. 5
Hai đứa ngu với 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

nhàn rỗi $2. 5
Giấy Dosa $2. 7
Tối đa $3. 65
Bồn tắm Bisi Bele $4. 50
Bồn 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

Viết chuỗi vào tệp xml Python

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

SubElement-Python XML Parsing Tutorial-Edureka

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

pop-Python XML Parsing Tutorial-Edureka

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

elementpop-Python XML Parsing Tutorial-Edureka

Đầu ra cho thấy rằng phần tử con đầ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ẻ phụ. 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ố 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 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 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

vu vơ
Giấy Dosa
Upma
Bồn tắm Bisi Bele
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.  

Làm cách nào để chuyển đổi văn bản thành tệp XML trong Python?

Cách chuyển đổi TXT sang XML thông qua Python .
Tải tệp TXT với phiên bản Sổ làm việc
Chuyển đổi TXT sang XML bằng cách gọi Workbook. phương thức lưu

Làm cách nào để ghi dữ liệu vào tệp XML bằng Python?

Bây giờ để phù hợp với văn bản bên trong phần tử con, chúng ta phải sử dụng mục. văn bản và đặt giá trị chuỗi bằng toán tử gán. Nối đối tượng mục con với đối tượng gốc và ghi tệp XML bằng phương thức write() và chuyển tên tệp dưới dạng chuỗi

Làm cách nào để đọc tệp XML dưới dạng chuỗi trong Python?

Ví dụ đọc tệp XML bằng Python . parse() method, to start parsing. Sau đó, chúng ta sẽ lấy thẻ cha của tệp XML bằng getroot(). Sau đó, chúng tôi sẽ hiển thị thẻ cha của tệp XML. Bây giờ, để lấy các thuộc tính của thẻ con của thẻ cha sẽ sử dụng root[0].

Gói Python nào tạo XML?

xml. cây etree. Mô-đun ElementTree triển khai API đơn giản và hiệu quả để phân tích cú pháp và tạo dữ liệu XML