Hướng dẫn convert xml to python - chuyển đổi xml sang python

XML và JSON là 2 định dạng (format) dữ liệu được sử dụng phổ biến nhất hiện nay. Trong Python, chúng ta có thể chuyển đổi (convert) giữa 2 định dạng dữ liệu này. Bài này sẽ sử dụng module xmltodict để convert XML sang JSON trong Python.JSON là 2 định dạng (format) dữ liệu được sử dụng phổ biến nhất hiện nay. Trong Python, chúng ta có thể chuyển đổi (convert) giữa 2 định dạng dữ liệu này. Bài này sẽ sử dụng module xmltodict để convert XML sang JSON trong Python.

Trước khi đọc bài này, các bạn nên đọc các bài về XML và JSON trong Python sau:

  • Đọc (read) file XML với Python
  • Ghi (write) file XML với Python
  • Đọc (read) file JSON với Python
  • Ghi (write) file JSON với Python

1. Cài đặt module xmltodict trong Python

Module xmltodict được sử dụng để chuyển đổi (convert) định dạng dữ liệu XML sang định dạng dữ liệu JSON trong Python. Module này không có sẵn trong Python. Để sử dụng được module xmltodict, chúng ta cần cài đặt module này với câu lệnh sau:xmltodict được sử dụng để chuyển đổi (convert) định dạng dữ liệu XML sang định dạng dữ liệu JSON trong Python. Module này không có sẵn trong Python. Để sử dụng được module xmltodict, chúng ta cần cài đặt module này với câu lệnh sau:

pip install xmltodict

Để tìm hiểu kỹ hơn về thư viện này, các bạn có thể truy cập vào website của project xmltodict 0.12.0.

Các bạn có thể đọc lại bài Cài đặt Python và môi trường lập trình với Visual Studio Code để biết cách cài đặt các thư viện Python trong Visual Studio Code.

Chúng ta có một số bước để convert XML sang JSON trong Python:

Bước 1. Mở (open) và đọc (read) dữ liệu trong file XML để được XML string.. Mở (open) và đọc (read) dữ liệu trong file XML để được XML string.

Bước 2. Chuyển đổi (convert) XML string thành dictionary trong Python với hàm xmltodict.parse().. Chuyển đổi (convert) XML string thành dictionary trong Python với hàm xmltodict.parse().

Bước 3. Chuyển dictionary thành JSON string trong Python.. Chuyển dictionary thành JSON string trong Python.

Giả sử, chúng ta có file info.xml với nội dung như bên dưới.info.xml với nội dung như bên dưới.


    gochocit.com
    True
    360
    
        hardware
        software
        network
    
    https://www.facebook.com/gochocit/
    
        php
        wordpress
        mysql
    

File info.xml ở trên chỉ gồm các thẻ (tag) mà không có thuộc tính. Đoạn code bên dưới giúp chuyển đổi dữ liệu XML trong file info.xml thành JSON.info.xml ở trên chỉ gồm các thẻ (tag) mà không có thuộc tính. Đoạn code bên dưới giúp chuyển đổi dữ liệu XML trong file info.xml thành JSON.

import xmltodict, json

# read file xml
with open("info.xml") as file:
    data_xml = file.read()
# convert xml string to dictionary
data_dict = xmltodict.parse(data_xml)
# convert dictionary to json string
data_json = json.dumps(data_dict, indent=4)
# print xml string, dictionary, json string
print("type of data_xml:", type(data_xml))
print("type of data_dict:", type(data_dict))
print("type of data_json:", type(data_json))
print(data_json)
Kết quả
type of data_xml: 
type of data_dict: 
type of data_json: 
{
    "website": {
        "domainname": "gochocit.com",
        "active": "True",
        "numberposts": "360",
        "category": {
            "item": [
                "hardware",
                "software",
                "network"
            ]
        },
        "facebookpage": "https://www.facebook.com/gochocit/",
        "build": {
            "language": "php",
            "cms": "wordpress",
            "database": "mysql"
        }
    }
}

Có thể thấy, các tag trong XML sẽ được chuyển thành key, các text của tag sẽ được chuyển thành value trong JSON.key, các text của tag sẽ được chuyển thành value trong JSON.

Giả sử, file info1.xml có gồm các thẻ (tag) và thuộc tính post của tag item như bên dưới.info1.xml có gồm các thẻ (tag) và thuộc tính post của tag item như bên dưới.


    gochocit.com
    True
    360
    
        hardware
        software
        network
    
    https://www.facebook.com/gochocit/
    
        php
        wordpress
        mysql
    

Các thuộc tính trong XML sẽ được chuyển đổi thành gì nhỉ? Cùng xem kết quả của đoạn code bên dưới giúp chuyển đổi dữ liệu XML trong file info1.xml thành JSON để biết câu trả lời.info1.xml thành JSON để biết câu trả lời.

import xmltodict, json

# read file xml
with open("info1.xml") as file:
    data_xml = file.read()
# convert xml string to dictionary
data_dict = xmltodict.parse(data_xml)
# convert dictionary to json string
data_json = json.dumps(data_dict, indent=4)
# print xml string, dictionary, json string
print("type of data_xml:", type(data_xml))
print("type of data_dict:", type(data_dict))
print("type of data_json:", type(data_json))
print(data_json)
Kết quả
type of data_xml: 
type of data_dict: 
type of data_json: 
{
    "website": {
        "domainname": "gochocit.com",
        "active": "True",
        "numberposts": "360",
        "category": {
            "item": [
                {
                    "@post": "50",
                    "#text": "hardware"
                },
                {
                    "@post": "150",
                    "#text": "software"
                },
                {
                    "@post": "17",
                    "#text": "network"
                }
            ]
        },
        "facebookpage": "https://www.facebook.com/gochocit/",
        "build": {
            "language": "php",
            "cms": "wordpress",
            "database": "mysql"
        }
    }
}

Có thể thấy, các tag trong XML sẽ được chuyển thành key, các text của tag sẽ được chuyển thành value trong JSON.post của tag item được chuyển thành key “@post” và text của tag item được chuyển thành key “#text“.

  • Giả sử, file info1.xml có gồm các thẻ (tag) và thuộc tính post của tag item như bên dưới.
  • Các thuộc tính trong XML sẽ được chuyển đổi thành gì nhỉ? Cùng xem kết quả của đoạn code bên dưới giúp chuyển đổi dữ liệu XML trong file info1.xml thành JSON để biết câu trả lời.
  • Có thể thấy, thuộc tính post của tag item được chuyển thành key“@post” và text của tag item được chuyển thành key“#text“.
  • Gỡ rối khi dùng hàm date() trong PHP
  • Các thành phần cơ bản trong một chương trình Java