×

Làm việc với dữ liệu XML với module xml trong Python

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