ToolDeck

Trình Rút Gọn XML

Rút gọn XML bằng cách xóa khoảng trắng và chú thích

Thử ví dụ

Nhập XML

XML Đã Rút Gọn

Chạy cục bộ · An toàn để dán thông tin bí mật
XML đã rút gọn sẽ xuất hiện tại đây…

Rút gọn XML là gì?

Rút gọn XML là quá trình loại bỏ tất cả các ký tự không cần thiết khỏi một tài liệu XML mà không thay đổi ý nghĩa của nó. Một công cụ rút gọn XML xóa khoảng trắng giữa các thẻ, loại bỏ chú thích, xóa ngắt dòng và thu gọn thụt lề để tạo ra đầu ra gọn gàng trên một dòng duy nhất. Kết quả là một chuỗi XML mà các trình phân tích đọc giống hệt với phiên bản được định dạng ban đầu, tạo ra cùng một mô hình dữ liệu.

Đặc tả XML 1.0 (Khuyến nghị W3C, ấn bản thứ năm) định nghĩa các quy tắc xử lý khoảng trắng trong mục 2.10. Khoảng trắng giữa các thẻ không có giá trị ngữ nghĩa được gọi là "khoảng trắng không quan trọng". Các bộ xử lý XML được phép bỏ qua nó. Tuy nhiên, khoảng trắng bên trong nội dung văn bản mặc định là có ý nghĩa, trừ khi phần tử cha khai báo xml:space="default". Một công cụ rút gọn XML đúng đắn phân biệt giữa hai trường hợp này và chỉ xóa những gì an toàn để xóa.

Rút gọn khác với nén. Gzip hoặc Brotli giảm kích thước ở tầng truyền tải và yêu cầu giải nén trước khi phân tích. Rút gọn giảm kích thước của tài liệu gốc, vì vậy XML vẫn hợp lệ và có thể đọc được bởi bất kỳ trình phân tích nào mà không cần bước giải nén. Trên thực tế, rút gọn trước khi nén mang lại kết quả tốt nhất: bạn loại bỏ các ký tự dư thừa trước, sau đó thuật toán nén hoạt động trên đầu vào nhỏ gọn hơn.

Before · xml
After · xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Product catalog for Q1 2026 -->
<catalog>
  <product id="p101">
    <name>Widget A</name>
    <price currency="USD">29.99</price>
    <!-- Temporarily discounted -->
    <stock>142</stock>
  </product>
  <product id="p102">
    <name>Widget B</name>
    <price currency="EUR">19.50</price>
    <stock>87</stock>
  </product>
</catalog>
<?xml version="1.0" encoding="UTF-8"?><catalog><product id="p101"><name>Widget A</name><price currency="USD">29.99</price><stock>142</stock></product><product id="p102"><name>Widget B</name><price currency="EUR">19.50</price><stock>87</stock></product></catalog>

Tại sao sử dụng công cụ rút gọn XML?

XML được định dạng với thụt lề và chú thích rất lý tưởng cho quá trình phát triển và xem xét mã. Đối với lưu trữ, truyền tải và tiêu thụ bởi máy tính, định dạng thêm đó chỉ tốn thêm byte mà không mang lại lợi ích gì. Công cụ rút gọn XML lấp đầy khoảng trống đó.

Giảm kích thước truyền tải ngay lập tức
Xóa khoảng trắng và chú thích khỏi một tệp cấu hình XML điển hình giúp giảm kích thước từ 20–40%. Đối với các tải trọng SOAP và các luồng dữ liệu lớn, mức tiết kiệm thường vượt 30%, giảm chi phí băng thông và thời gian phản hồi API.
🔒
Chạy phía máy khách, không tải lên
Công cụ rút gọn chạy trong trình duyệt sử dụng DOMParser gốc. Không có dữ liệu nào được gửi đến máy chủ. Quá trình xử lý diễn ra cục bộ bất kể XML chứa nội dung gì.
📦
Không cần đăng ký hay cài đặt
Dán XML của bạn và nhận đầu ra đã rút gọn. Không tạo tài khoản, không cần cài đặt công cụ dòng lệnh, không có phụ thuộc. Hoạt động trên bất kỳ thiết bị nào có trình duyệt hiện đại.
🔧
Xử lý bất kỳ XML hợp lệ nào
Hỗ trợ không gian tên, phần CDATA, lệnh xử lý và các cấu trúc lồng nhau sâu. Nếu đầu vào là XML hợp lệ, công cụ rút gọn sẽ tạo ra đầu ra đã rút gọn hợp lệ.

Các trường hợp sử dụng công cụ rút gọn XML

Phát triển frontend
Rút gọn các tệp SVG được nhúng trong HTML hoặc CSS. Xóa khoảng trắng và chú thích khỏi đánh dấu SVG giúp giảm trọng lượng trang mà không làm thay đổi đồ họa được hiển thị. Ngay cả một bộ biểu tượng SVG khiêm tốn cũng có thể giảm được vài kilobyte.
Tối ưu hóa API backend
Thu nhỏ các phản hồi SOAP và tải trọng XML-RPC trước khi gửi đến máy khách. XML đã rút gọn phân tích nhanh hơn và giảm độ trễ mạng đối với các dịch vụ có thông lượng cao. Mức lợi ích lớn nhất khi các phản hồi chưa được nén ở tầng truyền tải.
DevOps và CI/CD
Rút gọn các tệp cấu hình XML (pom.xml, web.xml, .csproj) trong các pipeline build để giảm kích thước artifact trong các Docker image và gói triển khai. Image nhỏ hơn đồng nghĩa với thời gian kéo nhanh hơn và chi phí lưu trữ container registry thấp hơn.
QA và kiểm thử
Chuẩn hóa các fixture kiểm thử XML bằng cách rút gọn chúng trước khi so sánh. Xóa sự khác biệt về định dạng giúp tránh các lỗi kiểm thử giả do thay đổi chỉ liên quan đến khoảng trắng. Các fixture đã rút gọn chuẩn cũng giúp việc xem xét diff trong kiểm soát phiên bản dễ dàng hơn.
Kỹ thuật dữ liệu
Nén các luồng dữ liệu XML lớn (RSS, Atom, XBRL) trước khi lưu trữ trong cơ sở dữ liệu hoặc hàng đợi tin nhắn. Tải trọng nhỏ hơn đồng nghĩa với chi phí lưu trữ thấp hơn và thông lượng hàng đợi nhanh hơn. Ở quy mô lớn, mức giảm 20% kích thước luồng dữ liệu tích lũy nhanh chóng trong chi phí tính toán và I/O.
Học cấu trúc XML
Sinh viên có thể rút gọn rồi định dạng lại XML để hiểu cách các trình phân tích bỏ qua khoảng trắng không quan trọng và tại sao cấu trúc tài liệu độc lập với định dạng hiển thị của nó. Bài tập này giúp biến các quy tắc đặc tả trừu tượng thành điều cụ thể và quan sát được ngay lập tức.

Những gì rút gọn XML loại bỏ

Không phải mọi thứ trong tài liệu XML đều có thể xóa một cách an toàn. Bảng tham chiếu này cho thấy từng loại nội dung có thể xóa và liệu việc loại bỏ đó có luôn an toàn hay phụ thuộc vào trường hợp sử dụng của bạn.

MụcVí dụĐộ an toàn
IndentationSpaces/tabs before tagsAlways safe to remove
Line breaks\n and \r\n between tagsAlways safe to remove
Comments<!-- ... -->Safe unless parsed by app
XML declaration<?xml version="1.0"?>Keep if encoding is non-UTF-8
Processing instructions<?xml-stylesheet ...?>Keep if consumed downstream
Trailing whitespaceSpaces after closing tagsAlways safe to remove
Text node whitespaceSpaces inside text contentRemove only between tags, not within

Rút gọn vs Gzip vs Định dạng nhị phân

Rút gọn, nén và mã hóa nhị phân mỗi loại nhắm đến một tầng khác nhau của vấn đề kích thước. Rút gọn giữ đầu ra là XML hợp lệ, có thể đọc được bởi con người. Nén (gzip, Brotli) giảm thêm nhưng yêu cầu bước giải nén trước khi phân tích. Định dạng nhị phân giảm nhiều hơn nữa, nhưng cả hai đầu kết nối đều cần bộ mã hóa/giải mã tương thích — chủ yếu thực tế đối với các hệ thống nhúng hoặc dịch vụ doanh nghiệp nặng WSDL.

Rút gọn XML
Xóa khoảng trắng không quan trọng, chú thích và ngắt dòng. Đầu ra vẫn là XML hợp lệ, có thể đọc được bởi bất kỳ trình phân tích nào. Mức giảm điển hình: 20–40%. Không cần bước giải nén.
Nén Gzip / Brotli
Áp dụng thuật toán nén cho luồng byte. Mức giảm điển hình: 60–80% cộng thêm vào mức rút gọn. Yêu cầu bước giải nén trước khi XML có thể được phân tích. Tiêu chuẩn cho HTTP qua Content-Encoding.
Định dạng nhị phân (EXI, Fast Infoset)
Mã hóa XML Infoset trong biểu diễn nhị phân. Mức giảm điển hình: 80–95%. Yêu cầu bộ mã hóa/giải mã tương thích ở cả hai phía. Được sử dụng trong các môi trường bị ràng buộc như hệ thống nhúng và dịch vụ doanh nghiệp nặng WSDL.

Ví dụ mã

Rút gọn XML theo chương trình theo cùng một mẫu trong mọi ngôn ngữ: phân tích tài liệu thành cây, tùy chọn xóa các nút chú thích, sau đó tuần tự hóa mà không có thụt lề.

JavaScript (browser)
// Minify XML by parsing and re-serializing (strips formatting)
const raw = `<root>
  <item id="1">
    <!-- note -->
    <name>Test</name>
  </item>
</root>`

const parser = new DOMParser()
const doc = parser.parseFromString(raw, 'application/xml')

// Remove comment nodes
const walker = doc.createTreeWalker(doc, NodeFilter.SHOW_COMMENT)
const comments = []
while (walker.nextNode()) comments.push(walker.currentNode)
comments.forEach(c => c.parentNode.removeChild(c))

const minified = new XMLSerializer().serializeToString(doc)
// → "<root><item id=\"1\"><name>Test</name></item></root>"
Python
from lxml import etree

xml = """<root>
  <item id="1">
    <!-- note -->
    <name>Test</name>
  </item>
</root>"""

tree = etree.fromstring(xml.encode())

# Remove comments
for comment in tree.iter(etree.Comment):
    comment.getparent().remove(comment)

# Serialize without pretty-print (minified)
result = etree.tostring(tree, xml_declaration=False).decode()
# → '<root><item id="1"><name>Test</name></item></root>'

# With xml.etree (stdlib, no lxml needed)
import xml.etree.ElementTree as ET
root = ET.fromstring(xml)
ET.indent(root, space='')  # Python 3.9+
print(ET.tostring(root, encoding='unicode'))
Go
package main

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

func minifyXML(input string) (string, error) {
    decoder := xml.NewDecoder(strings.NewReader(input))
    var out strings.Builder
    encoder := xml.NewEncoder(&out)
    // No indentation = minified output
    for {
        tok, err := decoder.Token()
        if err != nil {
            break
        }
        // Skip comments
        if _, ok := tok.(xml.Comment); ok {
            continue
        }
        // Skip whitespace-only char data
        if cd, ok := tok.(xml.CharData); ok {
            if strings.TrimSpace(string(cd)) == "" {
                continue
            }
        }
        encoder.EncodeToken(tok)
    }
    encoder.Flush()
    return out.String(), nil
}
// minifyXML("<a>\n  <b>1</b>\n</a>") → "<a><b>1</b></a>"
CLI (xmllint)
# Minify XML with xmllint (part of libxml2)
xmllint --noblanks input.xml > minified.xml

# Minify from stdin
echo '<root>
  <item>hello</item>
</root>' | xmllint --noblanks -
# → <?xml version="1.0"?><root><item>hello</item></root>

# Strip comments too (combine with sed or xmlstarlet)
xmlstarlet ed -d '//comment()' input.xml | xmllint --noblanks -

# Check size reduction
echo "Before: $(wc -c < input.xml) bytes"
echo "After:  $(xmllint --noblanks input.xml | wc -c) bytes"

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

XML đã rút gọn có còn là XML hợp lệ không?
Có. Rút gọn chỉ xóa khoảng trắng không quan trọng và chú thích. Tài liệu kết quả tuân thủ cùng đặc tả XML 1.0 hoặc 1.1 với bản gốc. Bất kỳ trình phân tích tuân thủ nào cũng sẽ tạo ra cùng một mô hình dữ liệu từ cả phiên bản được định dạng lẫn phiên bản đã rút gọn.
XML giảm bao nhiêu sau khi rút gọn?
Mức tiết kiệm phụ thuộc vào cách tài liệu gốc được định dạng. XML có thụt lề nhiều và chú thích thường giảm 20–40%. Tài liệu đã gọn gàng từ trước có thể chỉ giảm 5–10%. So sánh số byte của đầu vào và đầu ra để đo mức giảm chính xác.
Rút gọn có thể làm hỏng XML của tôi không?
Nếu công cụ rút gọn chỉ xóa khoảng trắng giữa các thẻ (khoảng trắng không quan trọng) và chú thích, ngữ nghĩa tài liệu vẫn giữ nguyên. Trường hợp ngoại lệ duy nhất là các phần xml:space="preserve", nơi khoảng trắng bên trong các nút văn bản có ý nghĩa. Công cụ rút gọn đúng đắn tôn trọng chỉ thị này và để nguyên các phần đó.
Sự khác biệt giữa rút gọn XML và nén XML là gì?
Rút gọn chỉnh sửa chính văn bản XML bằng cách xóa các ký tự không mang dữ liệu. Nén (gzip, Brotli) mã hóa toàn bộ luồng byte thành định dạng nhị phân nhỏ hơn cần giải nén trước khi phân tích. Rút gọn và nén bổ sung cho nhau: rút gọn trước, rồi nén khi truyền tải.
Tôi có nên rút gọn XML trước khi lưu trữ trong cơ sở dữ liệu không?
Đối với khối lượng lớn dữ liệu XML, rút gọn trước khi lưu trữ giúp giảm sử dụng đĩa và tăng tốc độ đọc. Đối với các tệp cấu hình hoặc mẫu mà nhà phát triển chỉnh sửa thủ công, hãy lưu phiên bản được định dạng và rút gọn khi build hoặc trên đường truyền. Sự đánh đổi là giữa khả năng đọc và hiệu quả lưu trữ. Tránh rút gọn XML sẽ được kiểm toán, so sánh trong kiểm soát phiên bản hoặc cập nhật thủ công bởi đội vận hành — giữ định dạng trong những trường hợp đó tiết kiệm nhiều thời gian hơn là đáng giá so với lợi ích lưu trữ.
xmllint có hỗ trợ rút gọn không?
Có. Chạy xmllint --noblanks input.xml sẽ xóa khoảng trắng không quan trọng. Mặc định nó không xóa chú thích. Để xóa cả chú thích, hãy dẫn qua xmlstarlet ed -d '//comment()' trước, hoặc sử dụng XSLT tùy chỉnh để xóa các nút chú thích.
Rút gọn ảnh hưởng đến hiệu suất phân tích XML như thế nào?
XML đã rút gọn phân tích nhanh hơn vì trình phân tích xử lý ít byte hơn và không gặp các nút văn bản chỉ có khoảng trắng. Sự khác biệt rõ rệt nhất trên các tài liệu lớn (1 MB trở lên) và trong các trình phân tích theo luồng, nơi mỗi nút thêm vào đóng góp vào chi phí duyệt cây.