ToolDeck

YAML sang XML

Chuyển đổi YAML sang định dạng XML

Thử ví dụ

Đầu vào YAML

Đầu ra XML

Chạy cục bộ · An toàn để dán thông tin bí mật
XML sẽ xuất hiện tại đây…
Thử thêm:YAML sang JSON

Chuyển đổi YAML sang XML là gì?

Chuyển đổi YAML sang XML là quá trình biến đổi dữ liệu được viết bằng YAML (YAML Ain't Markup Language) thành XML (Extensible Markup Language). YAML sử dụng thụt lề và dấu câu tối giản để biểu diễn dữ liệu có cấu trúc, trong khi XML sử dụng thẻ mở và đóng với hệ thống phân cấp tường minh. Chuyển đổi giữa hai định dạng là tác vụ thường gặp khi các hệ thống tiêu thụ XML cần nhận dữ liệu ban đầu được viết bằng YAML.

YAML được thiết kế để con người dễ đọc. Các tệp cấu hình cho những công cụ như Kubernetes, Ansible, Docker Compose và GitHub Actions được viết bằng YAML vì nó gọn gàng và dễ chỉnh sửa thủ công. XML, được định nghĩa theo đặc tả W3C XML 1.0, là định dạng trao đổi dữ liệu mặc định trong các hệ thống doanh nghiệp, dịch vụ web SOAP và quy trình xử lý tài liệu trong nhiều thập kỷ. Khi một cấu hình được viết bằng YAML cần đưa vào pipeline dựa trên XML, việc chuyển đổi là bắt buộc.

Ánh xạ giữa YAML và XML không phải là một-một. YAML hỗ trợ các kiểu dữ liệu như boolean, số nguyên, số thực và null theo cách tự nhiên, trong khi XML coi mọi nội dung là văn bản trừ khi một schema (XSD hoặc DTD) định nghĩa kiểu bên ngoài. Các chuỗi YAML (danh sách) không có tương đương trực tiếp trong XML và phải được biểu diễn dưới dạng các phần tử lặp lại. Hiểu những khác biệt này giúp bạn dự đoán đầu ra và tránh bất ngờ.

Tại sao sử dụng công cụ chuyển đổi YAML sang XML này?

Viết lại thủ công YAML dưới dạng XML rất tẻ nhạt và dễ gây lỗi, đặc biệt với các cấu trúc lồng nhau sâu. Công cụ chuyển đổi này xử lý việc dịch cấu trúc ngay lập tức.

Chuyển đổi tức thì
Dán YAML và nhận đầu ra XML đã định dạng ngay lập tức. Không cần viết script hay cài đặt công cụ CLI chỉ để chuyển đổi một lần.
🔒
Bảo mật dữ liệu ưu tiên hàng đầu
Toàn bộ quá trình chuyển đổi chạy trong trình duyệt của bạn. Dữ liệu YAML của bạn — thường chứa địa chỉ máy chủ, thông tin xác thực và chi tiết hạ tầng — không bao giờ rời khỏi thiết bị.
📋
Không cần tài khoản
Sử dụng công cụ mà không cần đăng ký, đăng nhập hay cung cấp email. Mở trang và bắt đầu chuyển đổi ngay.
🌐
Xử lý cấu trúc lồng nhau
Hỗ trợ các ánh xạ YAML lồng nhau sâu, chuỗi, kiểu hỗn hợp và chuỗi nhiều dòng. Đầu ra giữ nguyên hệ thống phân cấp với thụt lề XML đúng chuẩn.

Các trường hợp sử dụng YAML sang XML

Phát triển Frontend
Chuyển đổi dữ liệu giả lập dạng YAML sang định dạng XML để kiểm thử các bộ phân tích XML, phép biến đổi XSLT, hoặc các thành phần mong đợi phản hồi XML từ API.
Tích hợp Backend
Chuyển đổi cấu hình YAML sang XML khi tích hợp với các dịch vụ Java kế thừa sử dụng cấu hình Spring XML, tệp Maven POM hoặc endpoint SOAP.
DevOps và CI/CD
Chuyển đổi các tệp khai báo Kubernetes hoặc Ansible YAML sang XML cho các công cụ yêu cầu đầu vào XML, chẳng hạn như cấu hình pipeline Jenkins hoặc một số hệ thống giám sát.
QA và Kiểm thử
Tạo các fixture XML kiểm thử từ định nghĩa YAML. YAML dễ duy trì hơn làm dữ liệu kiểm thử, và chuyển đổi sang XML tại thời điểm kiểm thử giúp fixture dễ đọc hơn.
Kỹ thuật dữ liệu
Chuyển đổi cấu hình ETL hoặc định nghĩa schema dạng YAML sang XML cho các pipeline tiêu thụ XML. Phổ biến trong lĩnh vực y tế (HL7), tài chính (FpML) và các hệ thống dữ liệu chính phủ.
Học tập và Thử nghiệm
Sinh viên và người mới có thể dán YAML và xem cấu trúc XML tương đương cạnh nhau, giúp xây dựng trực giác về cách dữ liệu phân cấp ánh xạ giữa các định dạng.

Tài liệu tham khảo ánh xạ kiểu dữ liệu YAML sang XML

Các kiểu dữ liệu YAML không ánh xạ trực tiếp sang XML. Bảng này cho thấy cách mỗi cấu trúc YAML được dịch sang tương đương XML. Hiểu các quy tắc này giúp bạn dự đoán đầu ra và xử lý các kết quả không mong đợi.

Kiểu YAMLVí dụ YAMLĐầu ra XML
Mapping (key: value){ name: Alice }<name>Alice</name>
Sequence (- item)- apple\n- banana<item>apple</item><item>banana</item>
Nested mappinguser:\n name: Alice<user><name>Alice</name></user>
Scalar (string)greeting: hello world<greeting>hello world</greeting>
Scalar (number)count: 42<count>42</count>
Scalar (boolean)active: true<active>true</active>
Nullvalue: null<value/>
Multiline stringbio: |\n Line one\n Line two<bio>Line one\nLine two</bio>

YAML và XML: Sự khác biệt về định dạng

YAML và XML giải quyết cùng một vấn đề — biểu diễn dữ liệu có cấu trúc — với những đánh đổi khác nhau. Không định dạng nào vượt trội hoàn toàn; lựa chọn đúng phụ thuộc vào ai hoặc cái gì tiêu thụ dữ liệu.

YAML
Phân tách bằng khoảng trắng, không có thẻ đóng. Hỗ trợ kiểu dữ liệu tự nhiên (bool, int, float, null). Ghi chú bằng #. Gọn gàng cho cấu hình và chỉnh sửa thủ công. Được phân tích bởi các thư viện như PyYAML, js-yaml và gopkg.in/yaml.
XML
Dựa trên thẻ với cặp mở/đóng tường minh. Mọi giá trị mặc định là văn bản; kiểu dữ liệu yêu cầu schema (XSD). Hỗ trợ thuộc tính, không gian tên, nội dung hỗn hợp và chỉ thị xử lý. Được phân tích bởi thư viện chuẩn của mọi ngôn ngữ lớn.
Tính năngYAMLXML
Cú phápDựa trên thụt lềDựa trên thẻ (&lt;tag&gt;...&lt;/tag&gt;)
Kiểu dữ liệuTự nhiên (string, int, bool, null, float)Chỉ văn bản (schema thêm kiểu)
Ghi chú# ghi chú nội tuyến<!-- ghi chú khối -->
Thuộc tínhKhông hỗ trợ tự nhiênCó (&lt;tag attr="val"&gt;)
Không gian tênKhông hỗ trợCó (xmlns:prefix)
Kích thước tệpNhỏ hơn (không có thẻ đóng)Lớn hơn (thẻ dài dòng)

Ví dụ code

Cách chuyển đổi YAML sang XML theo chương trình trong các ngôn ngữ và môi trường khác nhau:

JavaScript (Node.js)
import { parseDocument } from 'yaml'
import { js2xml } from 'xml-js'

const yamlStr = `
server:
  host: localhost
  port: 8080
  ssl: true
`

const data = parseDocument(yamlStr).toJSON()
const xml = js2xml({ root: data }, { compact: true, spaces: 2 })
console.log(xml)
// → <root>
// →   <server>
// →     <host>localhost</host>
// →     <port>8080</port>
// →     <ssl>true</ssl>
// →   </server>
// → </root>
Python
import yaml
import xml.etree.ElementTree as ET

yaml_str = """
database:
  host: db.example.com
  port: 5432
  credentials:
    user: admin
    password: secret
"""

data = yaml.safe_load(yaml_str)

def dict_to_xml(tag, d):
    elem = ET.Element(tag)
    for key, val in d.items():
        child = ET.SubElement(elem, key)
        if isinstance(val, dict):
            child.extend(dict_to_xml(key, val))
            elem.remove(child)
            elem.append(dict_to_xml(key, val))
        else:
            child.text = str(val)
    return elem

root = dict_to_xml('root', data)
ET.indent(root, space='  ')
print(ET.tostring(root, encoding='unicode'))
# → <root>
# →   <database>
# →     <host>db.example.com</host>
# →     <port>5432</port>
# →     ...
# →   </database>
# → </root>
Go
package main

import (
    "encoding/xml"
    "fmt"
    "gopkg.in/yaml.v3"
)

type Server struct {
    XMLName xml.Name `xml:"server"`
    Host    string   `yaml:"host" xml:"host"`
    Port    int      `yaml:"port" xml:"port"`
    SSL     bool     `yaml:"ssl"  xml:"ssl"`
}

func main() {
    yamlData := []byte("host: localhost\nport: 8080\nssl: true")

    var s Server
    yaml.Unmarshal(yamlData, &s)

    xmlBytes, _ := xml.MarshalIndent(s, "", "  ")
    fmt.Println(xml.Header + string(xmlBytes))
    // → <?xml version="1.0" encoding="UTF-8"?>
    // → <server>
    // →   <host>localhost</host>
    // →   <port>8080</port>
    // →   <ssl>true</ssl>
    // → </server>
}
CLI (yq + xq)
# Using yq (YAML processor) with xq (XML wrapper around jq)
# Install: pip install yq

# Convert YAML file to XML
yq -x . config.yaml
# → <host>localhost</host><port>8080</port>

# Pipe inline YAML through conversion
echo "name: Alice" | yq -x .
# → <name>Alice</name>

Câu hỏi thường gặp

Có thể biểu diễn chuỗi YAML trong XML không?
Có, nhưng XML không có kiểu danh sách tự nhiên. Các chuỗi YAML thường được chuyển đổi thành các phần tử XML lặp lại có cùng tên thẻ. Ví dụ, danh sách YAML dưới khóa "items" trở thành nhiều phần tử con &lt;item&gt;. Một số công cụ chuyển đổi bọc chúng trong phần tử cha &lt;items&gt; để rõ ràng hơn.
Điều gì xảy ra với các ghi chú YAML trong quá trình chuyển đổi?
Các ghi chú YAML (dòng bắt đầu bằng #) bị loại bỏ trong quá trình chuyển đổi. Hầu hết các bộ phân tích YAML loại bỏ ghi chú khi xây dựng cấu trúc dữ liệu, vì vậy chúng không có sẵn cho đầu ra XML. Nếu bạn cần giữ lại ghi chú, hãy dùng bộ phân tích YAML có khả năng lưu giữ chúng, chẳng hạn như ruamel.yaml trong Python.
Anchor và alias trong YAML được xử lý như thế nào?
Anchor YAML (&name) và alias (*name) được giải quyết trước khi chuyển đổi. Bộ phân tích mở rộng các alias thành giá trị đầy đủ của chúng, vì vậy XML kết quả chứa dữ liệu hoàn chỉnh mà không có bất kỳ tham chiếu anchor nào. Điều này có nghĩa là đầu ra XML có thể lớn hơn đầu vào YAML nếu anchor được dùng để tránh lặp lại.
Quá trình chuyển đổi có thể đảo ngược không (XML sang YAML)?
Một phần. Bạn có thể chuyển đổi XML sang YAML, nhưng kết quả có thể không khớp chính xác với YAML gốc. Thuộc tính XML không có tương đương YAML và thường được biểu diễn dưới dạng khóa đặc biệt (ví dụ: @attribute). Thông tin kiểu cũng bị mất vì XML coi mọi thứ là văn bản, vì vậy số và giá trị boolean trong YAML gốc trở thành chuỗi sau một lần chuyển đổi khứ hồi.
Làm thế nào để xử lý thuộc tính XML khi chuyển đổi từ YAML?
YAML không có khái niệm thuộc tính tự nhiên. Quy ước phổ biến là thêm tiền tố @ vào các khóa để chỉ ra chúng sẽ trở thành thuộc tính XML thay vì phần tử con. Ví dụ, "@id: 42" dưới một ánh xạ sẽ tạo ra &lt;element id="42"&gt;. Quy ước này được sử dụng bởi các thư viện như xml-js và xmltodict.
Công cụ này xử lý được tệp YAML tối đa bao nhiêu?
Công cụ chuyển đổi chạy trong trình duyệt của bạn, vì vậy giới hạn phụ thuộc vào bộ nhớ khả dụng của thiết bị. Các tệp lên đến vài megabyte chuyển đổi không có vấn đề trên phần cứng hiện đại. Với tệp rất lớn (50 MB+), hãy dùng công cụ dòng lệnh như yq hoặc script Python với PyYAML và lxml, vốn xử lý streaming và bộ nhớ hiệu quả hơn.
Tại sao YAML của tôi tạo ra đầu ra XML không hợp lệ?
Nguyên nhân phổ biến nhất là các khóa YAML không phải là tên phần tử XML hợp lệ. Tên phần tử XML không thể bắt đầu bằng chữ số, chứa dấu cách, hoặc sử dụng hầu hết các ký tự đặc biệt. Các khóa như "2nd-item" hoặc "my key" sẽ tạo ra XML không hợp lệ. Đổi tên các khóa vi phạm hoặc dùng công cụ chuyển đổi tự động làm sạch tên (ví dụ: thay dấu cách bằng dấu gạch dưới và thêm dấu gạch dưới ở đầu các tên bắt đầu bằng số).