Để làm việc với dữ liệu XML trong Python, module xml
được cung cấp như một công cụ mạnh mẽ hỗ trợ nhiều tác vụ khác nhau từ phân tích cú pháp đến tạo ra các tệp XML mới. Trong bài viết này, chúng ta sẽ khám phá cách sử dụng module xml
để thao tác với dữ liệu XML một cách hiệu quả.
Giới thiệu về XML
XML (Extensible Markup Language) là một ngôn ngữ đánh dấu được thiết kế để lưu trữ và vận chuyển dữ liệu. Nó đơn giản, có cấu trúc rõ ràng, và dễ đọc, làm cho nó trở thành một lựa chọn phổ biến cho việc trao đổi dữ liệu giữa các hệ thống khác nhau.
Khởi đầu với module xml
Python cung cấp sẵn module xml
với nhiều công cụ hữu ích để làm việc với XML, bao gồm:
xml.etree.ElementTree
: Cung cấp công cụ để phân tích và tạo tài liệu XML.xml.dom.minidom
: Được sử dụng để phân tích và thao tác với cú pháp DOM của tài liệu XML.xml.sax
: Cung cấp công cụ để phân tích cú pháp sự kiện.
Sử dụng xml.etree.ElementTree
xml.etree.ElementTree
là công cụ phổ biến nhất của module xml
để thao tác với XML. Đây là một bộ công cụ đơn giản nhưng mạnh mẽ cho việc đọc và viết các tệp XML.
Đọc dữ liệu XML
Để đọc một tệp XML, ta sử dụng ElementTree.parse()
để phân tích cú pháp tài liệu XML và thu được một đối tượng cây.
import xml.etree.ElementTree as ET
tree = ET.parse('du_lieu.xml')
root = tree.getroot()
print(root.tag) # In ra thẻ gốc
Truy cập các phần tử
Sau khi đã có cây XML (ElementTree), ta có thể truy cập các phần tử của nó bằng cách sử dụng các phương thức như find()
và findall()
.
for child in root:
print(child.tag, child.attrib)
# Truy cập một phần tử cụ thể
element = root.find('element_name')
print(element.text)
Thêm và xoá phần tử
Ta có thể dễ dàng thêm hoặc xoá các phần tử trong cây XML bằng cách sử dụng các phương thức append()
và remove()
.
new_element = ET.Element('new_element')
root.append(new_element)
root.remove(new_element)
Ghi dữ liệu XML ra tệp
Để ghi lại các thay đổi vào tệp XML, ta sử dụng phương thức write()
của đối tượng ElementTree.
tree.write('du_lieu_moi.xml')
Sử dụng xml.dom.minidom
xml.dom.minidom
có thể được sử dụng để phân tích cú pháp tài liệu XML và cung cấp một giao diện DOM để tương tác với nội dung của nó.
Đọc và phân tích dữ liệu XML
from xml.dom import minidom
doc = minidom.parse('du_lieu.xml')
Truy cập các phần tử
Sử dụng phương thức như getElementsByTagName()
để truy cập các phần tử.
elements = doc.getElementsByTagName('element_name')
for element in elements:
print(element.firstChild.data)
Tạo mới và ghi dữ liệu XML
doc = minidom.Document()
root = doc.createElement('root')
doc.appendChild(root)
element = doc.createElement('element_name')
root.appendChild(element)
with open('du_lieu_moi.xml', 'w') as f:
doc.writexml(f)
Sử dụng xml.sax
xml.sax
được sử dụng để phân tích cú pháp sự kiện, tức là khi gặp một phần tử hoặc một dữ liệu cụ thể, nó sẽ kích hoạt các sự kiện tương ứng.
Handler class
Bạn cần tạo một lớp Handler kế thừa xml.sax.ContentHandler
để xử lý các sự kiện.
import xml.sax
class MyHandler(xml.sax.ContentHandler):
def startElement(self, name, attrs):
print(f'Start element: {name}')
def endElement(self, name):
print(f'End element: {name}')
def characters(self, content):
print(f'Character data: {content}')
parser = xml.sax.make_parser()
parser.setContentHandler(MyHandler())
parser.parse('du_lieu.xml')
Kết luận
Module xml
của Python cung cấp nhiều công cụ mạnh mẽ để thao tác với dữ liệu XML. Tùy vào nhu cầu, bạn có thể chọn xml.etree.ElementTree
cho các tác vụ đơn giản và trực tiếp, xml.dom.minidom
cho các tác vụ phức tạp hơn với DOM, hoặc xml.sax
cho mục đích phân tích cú pháp sự kiện. Việc nắm vững các công cụ này sẽ giúp bạn dễ dàng xử lý và thao tác với dữ liệu XML trong Python.
Comments