ToolDeck

Định dạng XML

Định dạng và làm đẹp XML với tô sáng cú pháp

Thử ví dụ

Nhập XML

XML Được Định Dạng

Chạy cục bộ · An toàn để dán thông tin bí mật
XML được định dạng sẽ xuất hiện tại đây…

Định dạng XML là gì?

Định dạng XML (còn được gọi là XML pretty-printing hay XML beautification) là quá trình thêm thụt lề và ngắt dòng nhất quán vào một tài liệu XML để cấu trúc phân cấp của nó trở nên rõ ràng. XML thô từ các API, trình tạo cấu hình hoặc bộ tuần tự hóa thường được trả về dưới dạng một dòng duy nhất không có khoảng trắng giữa các thẻ. Một công cụ định dạng XML phân tích tài liệu đó thành cây, sau đó tuần tự hóa lại với khoảng cách nhất quán.

Đặc tả XML 1.0 (Khuyến nghị W3C, phiên bản thứ năm) định nghĩa một ngữ pháp chặt chẽ trong đó mỗi thẻ mở phải có thẻ đóng tương ứng hoặc là thẻ tự đóng, thuộc tính phải được đặt trong dấu ngoặc, và năm ký tự (<, >, &, ", ') yêu cầu thoát thực thể. Một công cụ định dạng phải tuân theo các quy tắc này trong khi chỉ chèn khoảng trắng không quan trọng không làm thay đổi tập thông tin (infoset) của tài liệu.

XML được định dạng dễ đọc hơn trong quá trình xem xét mã, dễ so sánh hơn trong hệ thống kiểm soát phiên bản, và dễ gỡ lỗi hơn khi một dịch vụ trả về dữ liệu không mong đợi. Bản thân thao tác định dạng là không mất mát: nội dung logic của tài liệu vẫn giống nhau, chỉ có cách trình bày thay đổi. Các công cụ như git diff và nền tảng xem xét pull request chỉ hiển thị các dòng đã thay đổi — XML được thụt lề nhất quán đảm bảo các so sánh đó phản ánh thay đổi thực sự, không phải nhiễu từ việc định dạng lại.

Before · xml
After · xml
<catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date></book><book id="bk102"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-12-16</publish_date></book></catalog>
<catalog>
  <book id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developer's Guide</title>
    <genre>Computer</genre>
    <price>44.95</price>
    <publish_date>2000-10-01</publish_date>
  </book>
  <book id="bk102">
    <author>Ralls, Kim</author>
    <title>Midnight Rain</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2000-12-16</publish_date>
  </book>
</catalog>

Tại sao sử dụng công cụ định dạng XML trực tuyến?

Định dạng XML bằng tay dễ xảy ra lỗi và mất thời gian, đặc biệt đối với các tài liệu có nhiều cấp lồng nhau hoặc nhiều không gian tên lẫn lộn. Một công cụ chạy trên trình duyệt cho kết quả định dạng trong vòng chưa đầy một giây, bất kể kích thước tệp.

Định dạng tức thì
Dán hoặc nhập XML và nhận đầu ra được thụt lề ngay lập tức. Không cần chờ cài đặt công cụ dòng lệnh hay chạy bước build.
🔒
Xử lý ưu tiên quyền riêng tư
Toàn bộ quá trình phân tích và định dạng diễn ra trong trình duyệt của bạn thông qua API DOMParser. XML của bạn không bao giờ rời khỏi máy và không bao giờ được gửi đến bất kỳ máy chủ nào.
🎨
Thụt lề tùy chỉnh
Chọn thụt lề 2 khoảng, 4 khoảng hoặc ký tự tab để phù hợp với tiêu chuẩn viết mã của dự án mà không cần chỉnh sửa tệp cấu hình.
📋
Không cần tài khoản hay cài đặt
Mở trang, dán XML và sao chép kết quả. Không có biểu mẫu đăng ký, không có phần mềm máy tính để bàn, không có tiện ích mở rộng trình duyệt.

Các trường hợp sử dụng công cụ định dạng XML

Phát triển frontend
Kiểm tra đánh dấu SVG hoặc các đoạn XHTML được trả về bởi một CMS. Định dạng đầu ra thô giúp bạn nhanh chóng xác định các thuộc tính cụ thể và các nhóm lồng nhau.
Kỹ thuật backend
Gỡ lỗi phản hồi SOAP, luồng RSS hoặc tải trọng XML-RPC từ các dịch vụ bên thứ ba. Đầu ra được định dạng giúp bạn theo dõi các phần tử bị thiếu hoặc không gian tên không đúng.
DevOps và CI/CD
Đọc các tệp pom.xml của Maven, tập lệnh build Ant hoặc tệp dự án .csproj được tạo tự động mà không có thụt lề. Định dạng chúng trước khi commit để giữ cho các so sánh sạch sẽ.
QA và kiểm thử
So sánh tải trọng XML mong đợi và thực tế trong các bài kiểm thử tích hợp. Định dạng cả hai bên về cùng một kiểu thụt lề giúp loại bỏ kết quả âm tính giả do sự khác biệt về khoảng trắng.
Kỹ thuật dữ liệu
Kiểm tra các bản xuất XML từ cơ sở dữ liệu, các pipeline ETL hoặc cổng dữ liệu mở của chính phủ. XML được định dạng tiết lộ cấu trúc bản ghi trước khi bạn viết phép biến đổi XSLT hoặc truy vấn XPath.
Học XML
Sinh viên học qua các hướng dẫn XML của W3C có thể dán tệp bài tập vào công cụ định dạng để xác minh rằng cú pháp lồng nhau và thuộc tính của họ là đúng.

Tham chiếu thực thể được định nghĩa sẵn trong XML

XML đặt trước năm ký tự cho cú pháp của nó. Khi các ký tự này xuất hiện dưới dạng nội dung văn bản hoặc giá trị thuộc tính, chúng phải được thay thế bằng các tham chiếu thực thể được định nghĩa sẵn. Một công cụ định dạng đúng đắn giữ nguyên các thực thể này trong quá trình định dạng.

Ký tựVai trò trong XMLThực thể
<Start of tag&lt;
>End of tag&gt;
&Start of entity&amp;
"Attribute delimiter&quot;
'Attribute delimiter&apos;

So sánh các kiểu thụt lề XML

Không có một tiêu chuẩn duy nhất nào cho việc thụt lề XML. Lựa chọn phụ thuộc vào quy ước của nhóm bạn và các công cụ trong pipeline. Dưới đây là ba kiểu phổ biến nhất.

2 khoảng (được khuyến nghị)
Lựa chọn phổ biến nhất cho XML liên quan đến web: SVG, XHTML, SOAP, cấu hình Spring. Giữ các tài liệu có nhiều cấp lồng nhau gọn gàng. Được sử dụng mặc định trong hầu hết các công cụ định dạng trực tuyến và IDE.
4 khoảng
Được ưa thích trong hệ sinh thái Java (Maven, Ant, manifest Android) nơi các tệp hiếm khi vượt quá 3-4 cấp lồng nhau. Phù hợp với thụt lề mặc định của mã Java và C#.
Ký tự tab
Cho phép mỗi lập trình viên thiết lập chiều rộng hiển thị của riêng họ trong trình soạn thảo. Phổ biến trong các dự án kế thừa và một số công cụ Microsoft (.csproj, .nuspec). Tạo ra kích thước tệp nhỏ hơn so với khoảng trắng.

Ví dụ mã: Định dạng XML theo chương trình

Khi bạn cần định dạng XML trong một tập lệnh hoặc quy trình build, mọi ngôn ngữ lớn đều có tùy chọn tích hợp sẵn hoặc trong thư viện chuẩn. Dưới đây là các ví dụ hoạt động được bạn có thể sao chép trực tiếp.

JavaScript (DOM API)
const raw = '<root><item>hello</item></root>'
const parser = new DOMParser()
const doc = parser.parseFromString(raw, 'application/xml')
const serializer = new XMLSerializer()
const xml = serializer.serializeToString(doc)

// Indent with XSLT (browser-native approach)
const xslt = new DOMParser().parseFromString(`
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="node()|@*">
      <xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
    </xsl:template>
  </xsl:stylesheet>`, 'application/xml')

const proc = new XSLTProcessor()
proc.importStylesheet(xslt)
const formatted = proc.transformToDocument(doc)
console.log(new XMLSerializer().serializeToString(formatted))
// → <root>\n  <item>hello</item>\n</root>
Python
import xml.dom.minidom

raw = '<root><item>hello</item><item>world</item></root>'
dom = xml.dom.minidom.parseString(raw)
print(dom.toprettyxml(indent='  '))
# → <?xml version="1.0" ?>
# → <root>
# →   <item>hello</item>
# →   <item>world</item>
# → </root>

# With lxml (handles namespaces, XSD, large files)
from lxml import etree
tree = etree.fromstring(raw.encode())
print(etree.tostring(tree, pretty_print=True).decode())
Go
package main

import (
    "encoding/xml"
    "fmt"
    "strings"
)

func formatXML(raw string) (string, error) {
    decoder := xml.NewDecoder(strings.NewReader(raw))
    var out strings.Builder
    encoder := xml.NewEncoder(&out)
    encoder.Indent("", "  ")
    for {
        tok, err := decoder.Token()
        if err != nil {
            break
        }
        encoder.EncodeToken(tok)
    }
    encoder.Flush()
    return out.String(), nil
}
// formatXML("<a><b>1</b></a>") → "<a>\n  <b>1</b>\n</a>"
CLI (xmllint)
# Format XML file with xmllint (part of libxml2, pre-installed on macOS/Linux)
xmllint --format input.xml > formatted.xml

# Format from stdin
echo '<a><b>1</b></a>' | xmllint --format -
# → <?xml version="1.0"?>
# → <a>
# →   <b>1</b>
# → </a>

# Validate and format at the same time
xmllint --format --schema schema.xsd input.xml

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

Định dạng XML có thay đổi ý nghĩa của tài liệu không?
Không. Định dạng XML chỉ thêm hoặc bỏ khoảng trắng không quan trọng giữa các thẻ. Tập thông tin XML (infoset) vẫn giống nhau. Ngoại lệ duy nhất: nếu lược đồ của bạn sử dụng xml:space="preserve" trên một số phần tử, công cụ định dạng phải để nguyên các phần tử đó — và công cụ này tôn trọng điều đó.
Sự khác biệt giữa định dạng XML và xác thực XML là gì?
Định dạng thêm thụt lề và ngắt dòng để làm XML dễ đọc hơn. Xác thực kiểm tra xem tài liệu có tuân thủ một lược đồ (XSD, DTD hoặc RelaxNG) hay không. Một tài liệu có thể có cấu trúc hợp lệ nhưng không hợp lệ theo lược đồ của nó. Sử dụng công cụ định dạng này để dễ đọc và công cụ Xác thực XML để kiểm tra tuân thủ lược đồ.
Tôi có thể định dạng XML có không gian tên không?
Có. DOMParser của trình duyệt xử lý không gian tên XML một cách tự nhiên. Tiền tố không gian tên, khai báo không gian tên mặc định (xmlns) và tên thuộc tính đủ điều kiện đều được giữ nguyên trong quá trình định dạng. Công cụ định dạng không thêm, xóa hay đổi tên bất kỳ ràng buộc không gian tên nào.
Tôi có thể định dạng tệp XML lớn đến bao nhiêu trong trình duyệt?
Định dạng dựa trên trình duyệt hoạt động tốt cho các tài liệu lên đến khoảng 10 MB. Vượt quá đó, cây DOM tiêu thụ nhiều bộ nhớ và giao diện người dùng có thể không phản hồi. Đối với các tệp rất lớn, hãy sử dụng công cụ dòng lệnh như xmllint --format, vốn xử lý XML theo luồng.
Tại sao XML được định dạng của tôi lại có thêm khai báo XML?
Một số công cụ định dạng thêm <?xml version="1.0"?> khi tuần tự hóa cây DOM. Khai báo này là tùy chọn trong XML 1.0 khi mã hóa là UTF-8. Nếu bạn không muốn nó, hãy xóa dòng đầu tiên khỏi đầu ra. Khai báo này không ảnh hưởng đến việc phân tích bởi bất kỳ bộ xử lý XML nào tuân thủ.
Định dạng XML có giống rút gọn XML không?
Đây là hai thao tác ngược nhau. Định dạng thêm khoảng trắng để cải thiện khả năng đọc. Rút gọn loại bỏ tất cả khoảng trắng không cần thiết để giảm kích thước tệp. Cả hai thao tác đều không mất mát đối với infoset XML. Nếu bạn cần rút gọn XML, hãy sử dụng công cụ Rút gọn XML.
Sự khác biệt giữa định dạng XML và HTML là gì?
XML nghiêm ngặt: mỗi thẻ phải được đóng, giá trị thuộc tính phải được đặt trong dấu ngoặc, và tài liệu phải có đúng một phần tử gốc. HTML (cụ thể là HTML5) linh hoạt hơn: thẻ đóng tùy chọn, thuộc tính không có dấu ngoặc và các phần tử void như &lt;br&gt; đều hợp lệ. Một công cụ định dạng XML sẽ từ chối XML không hợp lệ, trong khi công cụ định dạng HTML chấp nhận cú pháp mà XML không cho phép.