Tạo tập tin xml python

XML, hoặc Ngôn ngữ đánh dấu mở rộng, là ngôn ngữ đánh dấu thường được sử dụng để cấu trúc, lưu trữ và truyền dữ liệu giữa các hệ thống. Mặc dù không phổ biến như trước đây nhưng nó vẫn được sử dụng trong các dịch vụ như RSS và SOAP, cũng như để cấu trúc các tệp như tài liệu Microsoft Office

Với việc Python là ngôn ngữ phổ biến cho web và phân tích dữ liệu, có khả năng bạn sẽ cần đọc hoặc ghi dữ liệu XML vào một lúc nào đó, trong trường hợp đó thì bạn thật may mắn.

Trong suốt bài viết này, chúng ta sẽ chủ yếu xem xét mô-đun ElementTree để đọc, viết và sửa đổi dữ liệu XML. Chúng tôi cũng sẽ so sánh nó với mô-đun minidom cũ hơn trong một vài phần đầu tiên để bạn có thể so sánh tốt giữa hai mô-đun này.

Các mô-đun XML

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
3, hay Triển khai DOM tối thiểu, là một triển khai đơn giản của Mô hình đối tượng tài liệu (DOM). DOM là một giao diện lập trình ứng dụng xử lý XML như một cấu trúc cây, trong đó mỗi nút trong cây là một đối tượng. Do đó, việc sử dụng mô-đun này yêu cầu chúng ta phải làm quen với chức năng của nó

Mô-đun

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 cung cấp giao diện "Pythonic" hơn để xử lý XMl và là một tùy chọn tốt cho những người không quen thuộc với DOM. Nó cũng có khả năng là một ứng cử viên tốt hơn để được sử dụng bởi nhiều lập trình viên mới làm quen hơn do giao diện đơn giản của nó, mà bạn sẽ thấy trong suốt bài viết này

Trong bài viết này, mô-đun

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 sẽ được sử dụng trong tất cả các ví dụ, trong khi mô-đun
xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
3 cũng sẽ được minh họa, nhưng chỉ để đếm và đọc các tài liệu XML

Ví dụ về tệp XML

Trong các ví dụ dưới đây, chúng tôi sẽ sử dụng tệp XML sau, tệp này sẽ được lưu dưới dạng "items. xml"


    
        item1abc
        item2abc
    

Như bạn có thể thấy, đó là một ví dụ XML khá đơn giản, chỉ chứa một vài đối tượng lồng nhau và một thuộc tính. Tuy nhiên, nó đủ để chứng minh tất cả các thao tác XML trong bài viết này

Đọc tài liệu XML

Sử dụng minidom

Để phân tích một tài liệu XML bằng cách sử dụng

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
3, trước tiên chúng ta phải nhập nó từ mô-đun
xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
8. Mô-đun này sử dụng hàm
xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
9 để tạo đối tượng DOM từ tệp XML của chúng tôi. Hàm
xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
9 có cú pháp như sau

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])

Ở đây tên tệp có thể là một chuỗi chứa đường dẫn tệp hoặc một đối tượng kiểu tệp. Hàm trả về một tài liệu, có thể được xử lý dưới dạng một loại XML. Vì vậy, chúng ta có thể sử dụng chức năng

$ python counterxmldom.py
2
1 để tìm một thẻ cụ thể

Vì mỗi nút có thể được coi là một đối tượng, nên chúng ta có thể truy cập các thuộc tính và văn bản của một phần tử bằng cách sử dụng các thuộc tính của đối tượng. Trong ví dụ dưới đây, chúng tôi đã truy cập các thuộc tính và văn bản của một nút cụ thể và của tất cả các nút cùng nhau

Kết quả là như sau

Hình 1

Nếu chúng tôi muốn sử dụng một tệp đã mở, chỉ cần chuyển đối tượng tệp của chúng tôi tới

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
9 như vậy

Ngoài ra, nếu dữ liệu XML đã được tải dưới dạng chuỗi thì chúng ta có thể sử dụng hàm

$ python counterxmldom.py
2
3 để thay thế

Sử dụng ElementTree

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 trình bày cho chúng ta một cách rất đơn giản để xử lý các tệp XML. Như mọi khi, để sử dụng nó, trước tiên chúng ta phải nhập mô-đun. Trong mã của chúng tôi, chúng tôi sử dụng lệnh
$ python counterxmldom.py
2
5 với từ khóa
$ python counterxmldom.py
2
6, cho phép chúng tôi sử dụng một tên đơn giản (trong trường hợp này là
$ python counterxmldom.py
2
7) cho mô-đun trong mã

Sau khi nhập, chúng tôi tạo cấu trúc cây với hàm

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
9 và chúng tôi lấy phần tử gốc của nó. Khi chúng ta có quyền truy cập vào nút gốc, chúng ta có thể dễ dàng duyệt qua cây, bởi vì cây là một đồ thị được kết nối

Sử dụng

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 và giống như ví dụ mã trước đó, chúng tôi có được các thuộc tính nút và văn bản bằng cách sử dụng các đối tượng liên quan đến từng nút

Mã này như sau

Kết quả sẽ như sau

Hình 2

Như bạn có thể thấy, điều này rất giống với ví dụ về

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
3. Một trong những điểm khác biệt chính là đối tượng
$ python counterxml.py
2
1 chỉ đơn giản là một đối tượng từ điển, điều này làm cho nó tương thích hơn một chút với mã Python khác. Chúng tôi cũng không cần sử dụng
$ python counterxml.py
2
2 để truy cập giá trị thuộc tính của mặt hàng như chúng tôi đã làm trước đây

Bạn có thể nhận thấy cách truy cập các đối tượng và thuộc tính bằng

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 giống Pythonic hơn một chút, như chúng tôi đã đề cập trước đây. Điều này là do dữ liệu XML được phân tích cú pháp dưới dạng danh sách và từ điển đơn giản, không giống như với
xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
3 trong đó các mục được phân tích cú pháp dưới dạng tùy chỉnh
$ python counterxml.py
2
5 và "Nút văn bản DOM"

Đếm các phần tử của tài liệu XML

Sử dụng minidom

Như trong trường hợp trước,

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
3 phải được nhập từ mô-đun
$ python counterxml.py
2
7. Mô-đun này cung cấp chức năng
$ python counterxml.py
2
8 mà chúng tôi sẽ sử dụng để tìm mục thẻ. Sau khi có được, chúng tôi sử dụng phương pháp tích hợp sẵn
$ python counterxml.py
2
9 để lấy số mục con được kết nối với một nút. Kết quả thu được từ mã bên dưới được hiển thị trong Hình 3

$ python counterxmldom.py
2

Hình 3

Hãy nhớ rằng điều này sẽ chỉ đếm số mục con bên dưới ghi chú mà bạn thực hiện

$ python counterxml.py
2
9 trên đó, trong trường hợp này là nút gốc. Nếu bạn muốn tìm tất cả các phần tử con trong một cây lớn hơn nhiều, bạn cần duyệt qua tất cả các phần tử và đếm từng phần tử con của chúng

Sử dụng ElementTree

Tương tự, mô-đun

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 cho phép chúng tôi tính toán số lượng nút được kết nối với một nút

mã ví dụ

Kết quả là như sau

$ python counterxml.py
2

hinh 4

Viết tài liệu XML

Sử dụng ElementTree

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 cũng tuyệt vời để ghi dữ liệu vào các tệp XML. Đoạn mã dưới đây cho biết cách tạo một tệp XML có cùng cấu trúc với tệp mà chúng tôi đã sử dụng trong các ví dụ trước

các bước là

  1. Tạo một phần tử, phần tử này sẽ đóng vai trò là phần tử gốc của chúng ta. Trong trường hợp của chúng tôi, thẻ cho phần tử này là "dữ liệu"
  2. Khi chúng ta có phần tử gốc, chúng ta có thể tạo các phần tử phụ bằng cách sử dụng hàm
    findall(match, namespaces=None)
    
    3. Hàm này có cú pháp

findall(match, namespaces=None)
4

Ở đây

findall(match, namespaces=None)
5 là nút cha để kết nối với,
$ python counterxml.py
2
1 là một từ điển chứa các thuộc tính phần tử và
findall(match, namespaces=None)
7 là các đối số từ khóa bổ sung. Hàm này trả về một phần tử cho chúng ta, phần tử này có thể được sử dụng để đính kèm các phần tử con khác, như chúng ta làm trong các dòng sau bằng cách chuyển các phần tử tới hàm tạo
findall(match, namespaces=None)
3
3. Mặc dù chúng ta có thể thêm các thuộc tính của mình bằng hàm
findall(match, namespaces=None)
3, nhưng chúng ta cũng có thể sử dụng hàm
find(match, namespaces=None)
0, như cách chúng ta thực hiện trong đoạn mã sau. Phần tử văn bản được tạo với thuộc tính
find(match, namespaces=None)
1 của đối tượng
find(match, namespaces=None)
2
4. Trong 3 dòng mã cuối cùng bên dưới, chúng tôi tạo một chuỗi từ cây XML và ghi dữ liệu đó vào một tệp mà chúng tôi mở

mã ví dụ

Thực thi mã này sẽ dẫn đến một tệp mới, "items2. xml", tương đương với "item" ban đầu. xml", ít nhất là về cấu trúc dữ liệu XML. Tuy nhiên, bạn có thể sẽ nhận thấy rằng chuỗi kết quả chỉ có một dòng và không có dấu thụt đầu dòng

Tìm phần tử XML

Sử dụng ElementTree

Mô-đun

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 cung cấp chức năng
find(match, namespaces=None)
4, giúp chúng tôi tìm các mục cụ thể trong cây. Nó trả về tất cả các mục với điều kiện được chỉ định. Ngoài ra, mô-đun có chức năng
find(match, namespaces=None)
5, chỉ trả về phần tử con đầu tiên phù hợp với tiêu chí đã chỉ định. Cú pháp của cả hai hàm này như sau

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

findall(match, namespaces=None)
find(match, namespaces=None)

Đối với cả hai hàm này, tham số

find(match, namespaces=None)
6 có thể là tên thẻ XML hoặc đường dẫn. Hàm
find(match, namespaces=None)
4 trả về một danh sách các phần tử và
find(match, namespaces=None)
8 trả về một đối tượng duy nhất thuộc loại
find(match, namespaces=None)
2

Ngoài ra, có một hàm trợ giúp khác trả về văn bản của nút đầu tiên khớp với tiêu chí đã cho

findtext(match, default=None, namespaces=None)

Dưới đây là một số mã ví dụ để cho bạn thấy chính xác cách các chức năng này hoạt động

Và đây là kết quả của việc chạy mã này

$ python findtree.py 
item1
{'name': 'item1'}
item1
{'name': 'item2'}
item2

Hình 5

Sửa đổi các phần tử XML

Sử dụng ElementTree

Mô-đun

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 trình bày một số công cụ để sửa đổi các tài liệu XML hiện có. Ví dụ dưới đây cho thấy cách thay đổi tên của nút, thay đổi tên của thuộc tính và sửa đổi giá trị của nó cũng như cách thêm thuộc tính phụ vào phần tử

Văn bản nút có thể được thay đổi bằng cách chỉ định giá trị mới trong trường văn bản của đối tượng nút. Tên của thuộc tính có thể được xác định lại bằng cách sử dụng hàm

findtext(match, default=None, namespaces=None)
1. Hàm
findtext(match, default=None, namespaces=None)
2 không chỉ hoạt động trên thuộc tính hiện có mà còn có thể được sử dụng để xác định thuộc tính mới

Đoạn mã dưới đây cho thấy cách thực hiện các thao tác này

Sau khi chạy mã, tệp XML kết quả "newitems. xml" sẽ có một cây XML với dữ liệu sau


    
        new text
        new text
    

Như chúng ta có thể thấy khi so sánh với tệp XML gốc, tên của các thành phần mục đã thay đổi thành "newitem", văn bản thành "văn bản mới" và thuộc tính "name2" đã được thêm vào cả hai nút

Bạn cũng có thể nhận thấy rằng việc ghi dữ liệu XML theo cách này (gọi

findtext(match, default=None, namespaces=None)
3 bằng tên tệp) sẽ bổ sung thêm một số định dạng cho cây XML để nó chứa các dòng mới và thụt đầu dòng

Tạo các phần tử con XML

Sử dụng ElementTree

Mô-đun

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 có nhiều cách để thêm phần tử mới. Cách đầu tiên chúng ta sẽ xem xét là sử dụng hàm
findtext(match, default=None, namespaces=None)
5, hàm này có tên nút và từ điển với các thuộc tính của nó làm tham số

Cách thứ hai là thông qua lớp

findtext(match, default=None, namespaces=None)
6, lấy phần tử cha và từ điển các thuộc tính làm đầu vào

Trong ví dụ của chúng tôi dưới đây, chúng tôi hiển thị cả hai phương pháp. Trong trường hợp đầu tiên, nút không có thuộc tính, vì vậy chúng tôi đã tạo một từ điển trống (

findtext(match, default=None, namespaces=None)
7). Trong trường hợp thứ hai, chúng tôi sử dụng một từ điển phổ biến để tạo các thuộc tính

Sau khi chạy mã này, tệp XML kết quả sẽ trông như thế này


    
        item1abc
        item2abc
    
    
         seconditemabc
    

Như chúng ta có thể thấy khi so sánh với tệp gốc, phần tử "seconditems" và phần tử phụ "seconditem" của nó đã được thêm vào. Ngoài ra, nút "seconditem" có thuộc tính "name2" và văn bản của nó là "seconditemabc", như mong đợi

Xóa các phần tử XML

Sử dụng ElementTree

Như bạn có thể mong đợi, mô-đun

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 có chức năng cần thiết để xóa các thuộc tính và phần tử con của nút

Xóa một thuộc tính

Mã dưới đây cho biết cách xóa thuộc tính của nút bằng cách sử dụng hàm

findtext(match, default=None, namespaces=None)
9. Hàm áp dụng cho tham số đối tượng
$ python counterxml.py
2
1. Nó chỉ định tên của thuộc tính và đặt nó thành
$ python findtree.py 
item1
{'name': 'item1'}
item1
{'name': 'item2'}
item2
1

Kết quả sẽ là tệp XML sau


    
        item1abc
        item2abc
    

Như chúng ta có thể thấy trong đoạn mã XML ở trên, mục đầu tiên không có thuộc tính "tên"

Xóa một phần tử phụ

Có thể xóa một phần tử phụ cụ thể bằng cách sử dụng hàm

$ python findtree.py 
item1
{'name': 'item1'}
item1
{'name': 'item2'}
item2
2. Chức năng này phải chỉ định nút mà chúng tôi muốn xóa

Ví dụ sau đây cho chúng ta thấy cách sử dụng nó

Kết quả sẽ là tệp XML sau

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
1

Như chúng ta có thể thấy từ mã XML ở trên, hiện tại chỉ có một nút "mục". Cái thứ hai đã bị loại bỏ khỏi cây ban đầu

Xóa tất cả các phần tử phụ

Mô-đun

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 trình bày cho chúng ta hàm
$ python findtree.py 
item1
{'name': 'item1'}
item1
{'name': 'item2'}
item2
4, có thể được sử dụng để loại bỏ tất cả các phần tử con của một phần tử đã cho

Ví dụ dưới đây cho chúng ta thấy cách sử dụng

$ python findtree.py 
item1
{'name': 'item1'}
item1
{'name': 'item2'}
item2
4

Kết quả sẽ là tệp XML sau

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
2

Như chúng ta có thể thấy trong đoạn mã XML ở trên, tất cả các phần tử con của phần tử "items" đã bị xóa khỏi cây

kết thúc

Python cung cấp một số tùy chọn để xử lý các tệp XML. Trong bài viết này, chúng tôi đã xem xét mô-đun

xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 và sử dụng nó để phân tích cú pháp, tạo, sửa đổi và xóa các tệp XML. Chúng tôi cũng đã sử dụng mô hình
xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
3 để phân tích các tệp XML. Cá nhân tôi khuyên bạn nên sử dụng mô-đun
xml.dom.minidom.parse(filename_or_file[, parser[, bufsize]])
4 vì nó dễ làm việc hơn nhiều và là mô-đun hiện đại hơn trong số hai mô-đun

Làm cách nào để tạo Tệp XML bằng Python?

Tạo tài liệu XML bằng Python . import minidom for using xml. dom. Sau đó, chúng tôi tạo phần tử gốc và nối nó vào XML. Sau đó, tạo một sản phẩm con của cha mẹ là Geek for Geeks.

Làm cách nào để tự động hóa Tệp XML bằng Python?

Tạo tệp XML tự động bằng Python .
Giải pháp
Tập tin cấu hình. Đây là file excel gồm 2 tab. Nội dung của tệp cũng có thể được đặt trong một bảng và dữ liệu được lấy từ đó, nhưng với mục đích nghiên cứu của tôi, tôi đã giữ nội dung trong excel
Mật mã
Tập tin cuối cùng
Để kết luận

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

Làm cách nào để tạo Tệp XML từ Excel trong Python?

Các nhà phát triển Python có thể dễ dàng tải và chuyển đổi các tệp XLSX sang XML chỉ bằng một vài dòng mã. .
Tải tệp XLSX với phiên bản Sổ làm việc
Gọi sổ làm việc. phương thức lưu
Truyền đường dẫn đầu ra với phần mở rộng XML làm tham số
Kiểm tra đường dẫn được chỉ định cho tệp XML kết quả