Trình Định Dạng & Rút Gọn XML
Dán XML để định dạng, làm đẹp hoặc nén nó tức thì.
Cách sử dụng
- Dán XML của bạn vào ô nhập.
- Nhấp Định dạng để làm đẹp hoặc Nén để giảm kích thước.
- Sao chép hoặc tải xuống kết quả.
Câu hỏi thường gặp
Điều gì xảy ra nếu XML của tôi chứa lỗi?
Công cụ xác thực XML của bạn bằng DOMParser tích hợp trong trình duyệt. Lỗi cú pháp được hiển thị trong khung đỏ phía trên đầu ra.
Có hỗ trợ các phần CDATA, chú thích và lệnh xử lý không?
Có. Trình định dạng bảo toàn tất cả các loại nút XML, bao gồm các phần CDATA, chú thích và lệnh xử lý.
Có giới hạn kích thước không?
Không có giới hạn cứng · điều này phụ thuộc vào bộ nhớ của trình duyệt của bạn. Các tệp XML nhiều MB thường định dạng tức thì.
Tổng Quan Thực Tế về XML
XML 1.0 trở thành Khuyến nghị W3C vào ngày 10 tháng 2 năm 1998, được biên tập bởi Tim Bray, Jean Paoli và C. M. Sperberg-McQueen, với nhóm công tác do Jon Bosak của Sun chủ trì. Trích dẫn ra mắt của Tim Bray đã nắm bắt ý định thiết kế: «XML is extensible, internationalized, robust, simple, and built for the Web.» Phiên bản chính tắc hiện tại là Fifth Edition, xuất bản ngày 26 tháng 11 năm 2008, được biên tập bởi Bray, Paoli, Sperberg-McQueen, Eve Maler và François Yergeau. XML kế thừa trực tiếp từ SGML (ISO 8879:1986), một định dạng tài liệu lớn hơn nhiều, khó triển khai hơn nhiều mà XML đã loại bỏ hầu hết các phần ít được dùng trong khi vẫn giữ nguyên mô hình tài liệu.
XML Vẫn Tồn Tại ở Đâu trong Năm 2026
JSON đã thống trị các payload REST API hơn một thập kỷ, nhưng XML vẫn cắm rễ sâu ở bất kỳ đâu mà độ chặt chẽ schema, ngữ nghĩa tài liệu hoặc các tiêu chuẩn đã được thiết lập ràng buộc nó. Biết nơi bạn sẽ gặp nó vào một ngày cụ thể là một nửa giá trị của một formatter tốt:
- Định dạng tài liệu Office:
.docx/.xlsx/.pptxcủa Microsoft là các kho lưu trữ zip chứa đầy các phần XML, được chuẩn hóa theo ECMA-376 và ISO/IEC 29500..odt/.ods/.odpcủa OpenDocument (ISO/IEC 26300) theo cùng mẫu. Ebook EPUB cũng được đóng gói XML. - Từ vựng Web: SVG (đồ họa vector), MathML (ký hiệu toán học), nguồn cấp Atom, RSS 2.0, và giao thức
sitemap.xmlmà Google và Bing phân tích cú pháp để lên lịch thu thập. - SOAP và nhắn tin doanh nghiệp: back-end ngân hàng, viễn thông, bảo hiểm và chính phủ vẫn còn các endpoint SOAP, thường ẩn sau một REST facade. Các tiêu chuẩn ngành trên XML bao gồm FpML cho phái sinh, XBRL cho hồ sơ SEC, ACORD cho bảo hiểm và ISO 20022 cho nhắn tin thanh toán.
- File build và cấu hình:
pom.xmlcủa Maven, Spring beans cũ, mọi tài nguyên Android (AndroidManifest.xml,res/values/strings.xml,res/layout/*.xml), vàInfo.plistcủa Apple ở biến thể XML. - Trao đổi theo lĩnh vực chuyên ngành: KML cho Google Earth, GPX cho dấu vết GPS, MusicXML cho ký hiệu nhạc (4.0 xuất bản 2021), XLIFF cho bản địa hóa (2.1 được chuẩn hóa theo ISO 21720 vào tháng 7 năm 2024), HL7 v3 / CDA cho tài liệu lâm sàng.
Hợp Lệ Cấu Trúc vs Hợp Lệ Schema: Chúng Không Giống Nhau
XML sử dụng hai cấp độ tuân thủ khác nhau và chúng dễ bị nhầm lẫn:
- Hợp lệ cấu trúc (well-formed) có nghĩa là tài liệu tuân theo ngữ pháp XML: đúng một phần tử gốc, tất cả thẻ cân bằng và lồng nhau đúng cách, giá trị thuộc tính được trích dẫn, tham chiếu thực thể kết thúc bằng dấu chấm phẩy, không có
<hoặc&không được thoát trong nội dung văn bản. - Hợp lệ schema (valid) có nghĩa là một tài liệu hợp lệ cấu trúc còn phải tuân theo DTD, XSD (XML Schema 1.1), RELAX NG hoặc schema Schematron đã được khai báo: các phần tử đúng ở đúng chỗ, với giá trị thuộc tính đúng kiểu, ở đúng số lượng.
Formatter này chỉ kiểm tra tính hợp lệ cấu trúc. DOMParser tích hợp của trình duyệt báo cáo lỗi phân tích cú pháp đầu tiên gặp phải thông qua phần tử parsererror, công cụ hiển thị lỗi này trong hộp lỗi màu đỏ. Xác thực theo schema cần một công cụ khác (Saxon cho XSD, libxml2 với xmllint --schema, dịch vụ W3C validator, v.v.).
Năm Tham Chiếu Thực Thể Được Định Nghĩa Sẵn
Theo W3C XML 1.0 §4.6, «well-formed documents need not declare any of the following entities»: amp, lt, gt, apos, quot. Dấu chấm phẩy ở cuối là bắt buộc, XML, không giống một số cách dùng HTML, sẽ không bao giờ chấp nhận & mà không có ; ở cuối.
| Thực thể | Ký tự | Khi nào cần dùng |
|---|---|---|
< | < | Luôn luôn trong nội dung phần tử (nếu không nó sẽ bắt đầu một thẻ) |
& | & | Luôn luôn (nếu không nó sẽ bắt đầu một tham chiếu thực thể) |
> | > | Bắt buộc trong chuỗi ]]> trong nội dung; khuyến nghị ở nơi khác để đối xứng |
' | ' | Trong giá trị thuộc tính được phân cách bằng dấu nháy đơn |
" | " | Trong giá trị thuộc tính được phân cách bằng dấu nháy kép |
Phần CDATA, Chú Thích và Hướng Dẫn Xử Lý
Ba tính năng cú pháp đặc biệt mà bất kỳ ai định dạng XML cuối cùng cũng gặp phải:
- Phần CDATA: các khối
<![CDATA[ … ]]>cho phép nhúng văn bản tùy ý mà không cần thoát<và&. Chuỗi duy nhất bạn không thể đặt bên trong CDATA là dấu phân cách đóng literal]]>. Hữu ích để nhúng mẫu code, mẫu regex hoặc đoạn HTML trong tài liệu XML. - Chú thích:
<!-- … -->. Chuỗi--là bất hợp lệ bên trong chú thích. - Hướng dẫn xử lý:
<?target …?>. Bản thân khai báo XML về mặt kỹ thuật không phải là PI, nhưng hầu hết công cụ xử lý nó theo cùng cách:<?xml version="1.0" encoding="UTF-8"?>là dòng đầu tiên được khuyến nghị.
Không Gian Tên
Cơ chế không gian tên của XML là thứ cho phép nhiều từ vựng cùng tồn tại trong một tài liệu: Atom cộng với extension tùy chỉnh, SOAP cộng với header WS-Security, phần tài liệu chính của OOXML tham chiếu các mối quan hệ, bản vẽ và hình ảnh từ các không gian tên anh em. Cú pháp là xmlns="…" cho không gian tên mặc định và xmlns:prefix="…" cho không gian tên có tiền tố, và formatter giữ nguyên cả hai không thay đổi. URI không gian tên là các định danh, không phải URL, chúng không cần phải trỏ đến bất kỳ thứ gì.
Hai Bẫy Bảo Mật XML Nổi Tiếng
Tấn công Billion Laughs. Một file XML nhỏ với các thực thể mở rộng đệ quy có thể phình to đến hàng tỷ ký tự trong bộ nhớ của parser:
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!-- … nine more layers later, the document expands to 10^9 lols -->
Các parser hiện đại giới hạn việc mở rộng thực thể để ngăn chặn điều này. Tấn công XXE (XML External Entity) khai thác parser giải quyết các thực thể bên ngoài để đọc file cục bộ (<!ENTITY xxe SYSTEM "file:///etc/passwd">) hoặc kích hoạt yêu cầu SSRF từ máy chủ. Cheat sheet phòng ngừa XXE của OWASP rất rõ ràng: «the safest way to prevent XXE is always to disable DTDs (External Entities) completely.» Đó chính xác là điều mà DOMParser của trình duyệt làm, nó bỏ qua hoàn toàn các khai báo thực thể DOCTYPE, đó là lý do tại sao formatter phía client này cũng an toàn để nạp XML không đáng tin.
Pretty-Print so với Minify
- Format / Beautify thụt lề các phần tử lồng nhau, đặt thẻ mở và đóng trên các dòng riêng của chúng, và tạo ra đầu ra dễ đọc hơn nhiều nhưng thường lớn hơn 30-50% so với tương đương được minify. Dùng khi gỡ lỗi, xem xét diff, hoặc tìm hiểu schema chưa quen.
- Minify loại bỏ tất cả khoảng trắng giữa các phần tử trong khi giữ nguyên khoảng trắng bên trong nội dung văn bản (XML định nghĩa khoảng trắng bên trong nội dung phần tử là có nghĩa theo mặc định trừ khi được ghi đè bởi
xml:space="default"). Dùng cho các payload production và bất kỳ trường hợp nào mà số byte truyền đi quan trọng.
Thuộc tính xml:space là lối thoát của bạn khi khoảng trắng thực sự quan trọng, chẳng hạn như mã nguồn nguyên văn được nhúng trong tài liệu. Đặt xml:space="preserve" trên phần tử tổ tiên và một processor tuân thủ sẽ giữ nguyên mọi khoảng trắng và ngắt dòng trong các phần tử con byte-for-byte.
Lỗi XML Phổ Biến Mà Formatter Bắt Được
&không được thoát trong nội dung văn bản. Dấu và trần luôn không hợp lệ; hãy dùng&.- Thẻ không khớp hoặc chưa đóng. Lỗi phân tích cú pháp phổ biến nhất. Mỗi
<tag>cần một</tag>tương ứng (hoặc dùng dạng tự đóng<tag/>). - Nhiều phần tử gốc. Một tài liệu XML phải có đúng một phần tử ngoài cùng. Nếu bạn có hai phần tử anh em ở cấp cao nhất, hãy bao chúng trong một phần tử cha.
- Không khớp mã hóa. Khai báo
<?xml version="1.0" encoding="UTF-8"?>phải khớp với mã hóa byte thực tế của file. UTF-16 BOM với khai báo UTF-8 là phiên bản kinh điển của lỗi này. - Ký tự dành riêng trong giá trị thuộc tính.
<tag attr="a<b">không hợp lệ dù<trông vô hại bên trong dấu nháy. - BOM lạc trước khai báo XML. Một số trình soạn thảo văn bản âm thầm chèn UTF-8 BOM gây nhầm lẫn cho các parser nghiêm ngặt.
- Kết thúc dòng hỗn hợp bên trong vùng
xml:space="preserve". Các CR / LF / CRLF không nhất quán có thể tạo ra các artefact khoảng trắng hiển thị khi round-trip qua các nền tảng khác nhau.
Câu Hỏi Thường Gặp Thêm
Tại sao XML của tôi không tạo ra đầu ra khi định dạng?
Hầu hết vì đầu vào không hợp lệ cấu trúc. Hộp lỗi phía trên đầu ra hiển thị lỗi phân tích cú pháp đầu tiên mà DOMParser của trình duyệt gặp phải, thường là thẻ bị thiếu hoặc không khớp, & không được thoát, hoặc thiếu phần tử gốc. Sửa lỗi và chạy lại.
XML của tôi có được tải lên máy chủ không?
Không. Cả định dạng và minification đều chạy bên trong DOMParser tích hợp và một bộ tuần tự hóa JavaScript nhỏ của trình duyệt. XML của bạn không bao giờ rời khỏi trang, điều này quan trọng cho các payload SOAP, file cấu hình và bất kỳ thứ gì khác có thể chứa thông tin xác thực, URL nội bộ hoặc dữ liệu khách hàng nhạy cảm.
Công cụ có thể xác thực theo schema XSD hoặc DTD không?
Không. Xác thực schema yêu cầu tải file schema và giải quyết các tham chiếu của nó, đây là vấn đề khác với kiểm tra tính hợp lệ cấu trúc mà trình duyệt thực hiện. Để xác thực XSD, hãy dùng Saxon hoặc xmllint --schema tại dòng lệnh, hoặc dịch vụ W3C XML Schema validator.
XML có còn liên quan trong năm 2026 không, hay tôi chỉ nên dùng JSON?
Tùy thuộc vào điều bạn đang làm. Đối với các REST API mới, JSON hầu như luôn là lựa chọn đúng. Nhưng XML vẫn là mặc định cho tài liệu Office (.docx, .xlsx), nhắn tin doanh nghiệp (SOAP, tiêu chuẩn tài chính), tài nguyên Android, EPUB, RSS / Atom, SVG và hầu hết các trao đổi trong ngành có quy định. Biết cách đọc, định dạng và xác thực XML vẫn là kỹ năng cơ bản; nó chỉ không phải là công cụ đầu tiên mỗi ngày như JSON.
«preserve all node types» có nghĩa là gì với formatter?
Các phần CDATA, chú thích và hướng dẫn xử lý đều được giữ nguyên chính xác như chúng xuất hiện trong đầu vào, formatter chỉ thay đổi khoảng trắng giữa các phần tử. Vì vậy, một khối <![CDATA[ if (a < b) { … } ]]> round-trip byte-for-byte ngay cả khi nội dung của nó chứa ký tự < vốn cần thoát.