Định dạng / Kiểm tra XML
Định dạng, minify, validate XML. Giữ attribute, namespace, CDATA. Chỉ trong browser.
XML Formatter / Validator
—Runs entirely in your browser. Your input never leaves your device.
What next?
How it works
XML là gì và tại sao vẫn còn phổ biến
XML (Extensible Markup Language) được W3C chuẩn hóa năm 1998 và nhanh chóng trở thành định dạng trao đổi dữ liệu phổ biến nhất trước khi JSON xuất hiện. Dù JSON đã thay thế XML trong hầu hết REST API mới, XML vẫn hiện diện rất nhiều trong thực tế: SOAP web services trong ngành ngân hàng và y tế, RSS/Atom feed, SVG, định dạng OOXML (.docx, .xlsx), file layout Android, Maven build config, và hầu hết các hệ thống tích hợp doanh nghiệp.
Là một developer, bạn sẽ gặp XML thường xuyên hơn bạn nghĩ.
Các quy tắc XML hay gây lỗi
XML parser tuân thủ spec bắt buộc phải từ chối input không hợp lệ, không cố đoán ý bạn như HTML parser. Các lỗi phổ biến nhất:
- Tag chưa đóng. Mọi tag mở đều cần tag đóng tương ứng hoặc phải là self-closing:
<br/>. Không giống HTML,<br>không hợp lệ trong XML. - Case-sensitive.
<Item>và<item>là hai element khác nhau. Dùng lẫn lộn sẽ khiến document không hợp lệ. - Chỉ một root element. Một XML document hợp lệ chỉ có đúng một element ở cấp cao nhất.
- Attribute value phải được quote.
<img width=300>là HTML shorthand; trong XML phải làwidth="300". - Ký tự đặc biệt trong text content. Các ký tự
<,>,&phải được escape thành<,>,&, hoặc dùng CDATA section.
Namespace — nguồn gốc của nhiều nhầm lẫn
XML namespace cho phép nhiều vocabulary XML cùng tồn tại trong một document mà không xung đột tên. Namespace là một URI được gán cho một prefix:
<root xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Envelope>
<soap:Body xsi:type="xs:string">Xin chào</soap:Body>
</soap:Envelope>
</root>
URI ở đây chỉ là định danh duy nhất — không cần trỏ đến URL thực. Formatter phải giữ nguyên toàn bộ namespace declaration. Tool này sử dụng fast-xml-parser với chế độ bảo toàn namespace, nên attribute và prefix không bị thay đổi sau khi format.
CDATA section
CDATA section cho phép nhúng text nguyên bản mà không cần escape:
<script><![CDATA[
if (a < b && c > d) {
xuLy();
}
]]></script>
Rất hữu ích khi nhúng HTML, JavaScript, hoặc SQL vào XML. Chuỗi duy nhất không thể có bên trong CDATA là ]]> (ký hiệu đóng). Tool này bảo toàn CDATA section nguyên vẹn qua quá trình format.
Comment và processing instruction
Comment XML <!-- như thế này --> không mang ý nghĩa ngữ nghĩa — nhiều parser bỏ qua chúng khi xử lý. Tool này dùng fast-xml-parser với chế độ bảo toàn comment, nên comment của bạn không bị mất sau khi format.
Processing instruction <?xml-stylesheet type="text/xsl" href="style.xsl"?> là chỉ thị cho ứng dụng xử lý. XML declaration <?xml version="1.0" encoding="UTF-8"?> luôn nên có khi document chứa ký tự non-ASCII.
Self-closing tag và thứ tự attribute
Self-closing tag (<element/>) và cặp <element></element> có nghĩa giống nhau trong XML. Formatter chuẩn hóa các empty element ngắn thành self-closing để giảm noise. Thứ tự attribute không có ý nghĩa theo spec, nhưng tool này giữ nguyên thứ tự gốc để tránh vấn đề với các workflow so sánh diff theo vị trí attribute.
Pretty-print vs minify
Pretty-print thêm indent và newline để cấu trúc dễ đọc. Dùng khi:
- Check vào version control (diff dễ đọc hơn nhiều)
- Debug SOAP envelope và API response
- Chỉnh sửa config file thủ công
Minify xóa toàn bộ whitespace không cần thiết. Dùng khi:
- Truyền qua mạng trong môi trường hạn chế bandwidth
- Nhúng XML vào môi trường mà whitespace có thể bị hiểu nhầm
- Giảm dung lượng khi lưu trữ XML archive lớn
Một lưu ý quan trọng: whitespace bên trong <![CDATA[…]]> hoặc trong mixed-content element là significant và không được xóa. Tool này tôn trọng điều này.
Khi nào XML vẫn tốt hơn JSON
- SOAP service: Hệ thống tài chính, y tế, chính phủ thường bắt buộc dùng SOAP. Không có tương đương JSON.
- RSS/Atom feed: Toàn bộ hệ sinh thái syndication vẫn là XML.
- SVG: Scalable Vector Graphics là XML — bạn có thể format file SVG y như XML thông thường.
- OOXML: File
.docxvà.xlsxlà ZIP chứa XML bên trong. - Document model phức tạp: Mixed content, namespace, XSD schema phù hợp hơn JSON cho tài liệu phức tạp.
Hiệu suất và giới hạn kích thước
Tool chạy hoàn toàn trên browser. Input đến khoảng 5 MB xử lý mượt mà trên hầu hết trình duyệt hiện đại. Với file lớn hơn, dùng xmllint --format trên command line sẽ nhanh hơn.
Bảo mật và quyền riêng tư
Toàn bộ quá trình xử lý diễn ra trong browser. XML của bạn không bao giờ được gửi lên server. Bạn có thể kiểm chứng bằng tab Network của DevTools.
FAQ
Tại sao XML của tôi bị lỗi parse dù trông có vẻ đúng?
XML parser tuân thủ spec bắt buộc phải từ chối input không hợp lệ, khác với HTML parser cố gắng đoán ý. Nguyên nhân phổ biến nhất: ký tự & hoặc < trong text content chưa được escape (dùng & và <), tag chưa đóng, sai case giữa tag mở và đóng (XML phân biệt hoa thường), hoặc có nhiều hơn một root element. Thông báo lỗi có kèm số dòng và cột — hãy nhảy đến vị trí đó trước.
Tool có giữ lại XML comment không?
Có. Tool dùng fast-xml-parser với chế độ bảo toàn comment, nên các node <!-- comment của bạn --> tồn tại qua quá trình reformat. Một số thư viện XML bỏ qua comment vì chúng không mang ý nghĩa ngữ nghĩa — nếu comment quan trọng với workflow của bạn, hãy xác nhận lại với parser downstream của bạn.
Việc reformat có thay đổi ý nghĩa XML không?
Với element-only content thì không. Whitespace giữa các element không có ý nghĩa ngữ nghĩa, nên thêm hay xóa indent là an toàn. Ngoại lệ là mixed content — element chứa cả child element lẫn text node. Với <p>Xin chào <b>thế giới</b></p>, khoảng trắng trước <b> có ý nghĩa và được giữ nguyên.
Namespace là gì và tại sao quan trọng?
Namespace cho phép nhiều XML vocabulary cùng tồn tại trong một document mà không xung đột tên. Prefix như soap: hay xsi: được bind đến URI qua attribute xmlns:. Formatter giữ nguyên toàn bộ namespace declaration và prefix binding — reorder hay xóa chúng sẽ làm hỏng XPath query và parser downstream phụ thuộc vào expanded name.
Tôi có thể format file SVG bằng tool này không?
Có. SVG là XML, nên formatter xử lý hoàn toàn đúng. Paste source SVG vào, chọn indent width, và nhấn format. Rất hữu ích khi muốn SVG hand-edited dễ diff trước khi check vào version control.
CDATA section là gì và khi nào nên dùng?
<![CDATA[…]]> bọc literal character data không cần parse như markup. Dùng khi cần nhúng HTML fragment, SQL, hoặc code chứa <, >, & mà không muốn escape từng ký tự. Chuỗi duy nhất không thể có bên trong CDATA là ]]>. Formatter giữ nguyên CDATA section không thay đổi.
Có giới hạn kích thước file không?
Tool chạy trên browser, nên giới hạn thực tế phụ thuộc vào thiết bị của bạn. File đến khoảng 5 MB hoạt động mượt mà trên hầu hết trình duyệt hiện đại. File lớn hơn có thể gây pause vài giây trong khi parser đồng bộ chạy. Với file trên 10 MB, xmllint --format trên command line nhanh hơn.
Document có <?xml version="1.0"?> ở đầu — có bắt buộc không?
XML declaration là tùy chọn với document encode UTF-8 hoặc UTF-16 (có BOM). Trong thực tế, luôn nên thêm khi document chứa ký tự non-ASCII và có thể được xử lý bởi strict parser — nó loại bỏ sự mơ hồ về encoding và phiên bản XML.