Định dạng XML
Thụt lề hoặc nén (minify) một tài liệu XML mà không thay đổi nội dung của nó, hoàn toàn trong trình duyệt của bạn.
Chạy hoàn toàn trong trình duyệt của bạn. Không có gì được tải lên, ghi log hay lưu trữ.
Dán một tài liệu XML vào và đọc nó. Có thụt lề, hoặc gộp toàn bộ trở lại thành một dòng, và không thay đổi gì khác, vì trong XML hầu hết những gì một trình định dạng muốn sắp xếp lại đều là dữ liệu.
Cách hoạt động
Một trình định dạng HTML có thể tự do thụt lề giữa các phần tử khối, vì ở đó trình duyệt không hiển thị khoảng trắng nào. XML không có phần tử khối hay phần tử nội dòng. Nó không biết bất kỳ phần tử nào của bạn có nghĩa là gì, và khoảng trắng bên trong một phần tử chứa văn bản là một phần của văn bản đó.
Vì vậy quy tắc ở đây rất hẹp, và đó là toàn bộ công cụ: một phần tử chỉ được thụt lề lại khi nó chứa phần tử khác và không có văn bản riêng. Mọi thứ khác — văn bản, nội dung hỗn hợp, CDATA, một phần tử lá chỉ chứa khoảng trắng, một phần tử được đánh dấu xml:space="preserve" — được trả về nguyên vẹn từng byte.
Bên trong thẻ mở, khoảng trắng không bao giờ là dữ liệu, nên các chuỗi khoảng trắng giữa các thuộc tính được rút gọn còn một. Những gì nằm trong dấu ngoặc kép được giữ nguyên. Các thuộc tính không bị sắp xếp lại, không bị đổi tên và không bị đặt lại dấu ngoặc.
Các thẻ phải cân bằng trước khi bất kỳ điều gì ở trên diễn ra. Một tài liệu có thẻ đóng không khớp, hoặc mở một phần tử mà không bao giờ đóng, sẽ bị từ chối thay vì được sắp xếp: một trình định dạng thụt lề cho mã đánh dấu bị hỏng sẽ trả về thứ trông có vẻ đúng nhưng lại sai theo một cách mới.
Ví dụ
| Trường hợp | Dữ liệu nhập | Kết quả |
|---|---|---|
| Nội dung hỗn hợp được giữ nguyên đúng như cũ | <p>Paper <em>and</em> cloth.</p> | <p>Paper <em>and</em> cloth.</p> |
| Phần tử lá chứa khoảng trắng vẫn giữ khoảng trắng đó | <value> </value> | <value> </value> |
| Các thuộc tính được cách nhau bằng một dấu cách | <a b="1" c="2"/> | <a b="1" c="2"/> |
Câu hỏi thường gặp
Tại sao tài liệu của tôi bị trả về trên một dòng duy nhất?
Vì phần tử gốc của nó chứa văn bản bên cạnh các phần tử. Đó là nội dung hỗn hợp, và khoảng trắng trong đó là dữ liệu: thụt lề sẽ chèn thêm những ký tự mà tài liệu của bạn không có. Trình định dạng vẫn hoạt động bình thường: nó từ chối chỉnh sửa nội dung của bạn chỉ để trông đẹp hơn.
Công cụ có kiểm tra XML của tôi theo một lược đồ (schema) không?
Không. Nó kiểm tra các thẻ có cân bằng hay không, vì đó là điều cần thiết để thụt lề được, và không gì khác. Để kiểm tra một tài liệu theo XSD, hãy dùng trình kiểm tra XML.
Có dữ liệu nào rời khỏi trình duyệt của tôi không?
Không. Trình định dạng là JavaScript chạy trên máy của bạn; tài liệu không bao giờ được gửi đi đâu cả, và đó là cách bố trí hợp lý duy nhất cho một tệp bạn dán vào chỉ để thay đổi khoảng trắng.
Tại sao các thuộc tính của tôi không được đặt trên các dòng riêng?
Vì thẻ mở không có cấu trúc lồng nhau nào để thể hiện. Tách một thẻ ra nhiều dòng là chuyện sở thích chứ không phải cấu trúc, và trình định dạng này chỉ làm những việc có một câu trả lời đúng duy nhất.
Chế độ “trên một dòng” loại bỏ những gì?
Chỉ khoảng trắng giữa các phần tử, đúng ở những chỗ mà việc thụt lề lẽ ra đã thêm vào. Văn bản, CDATA và chú thích không bị động đến, nên tài liệu vẫn nói chính xác những gì nó đã nói.
Cần biết
- Một lượt sắp xếp bố cục, không phải trình phân tích cú pháp. Không phân giải không gian tên (namespace), không mở rộng thực thể (entity), không chuẩn hóa giá trị nào và không kiểm tra gì theo lược đồ.
- Bảng mã là bảng mã của trình duyệt bạn. Khai báo ở đầu tài liệu được giữ nguyên không đổi, dù nó ghi gì.