XML 格式化
用 2 空格、4 空格或製表符美化 XML,或壓縮成單行。輸入時即時校驗是否格式良好,並顯示元素數量與巢狀深度。
把一整牆 XML 變得能讀,或者再壓回去。 貼上 XML 即可按你偏好的縮排重新排版,也可以壓縮成單行。輸入時會即時校驗是否格式良好,計數器則告訴你文件裡有多少元素、嵌套了多深。
用 2 空格、4 空格或製表符美化 XML,或壓縮成單行。輸入時即時校驗是否格式良好,並顯示元素數量與巢狀深度。
把一整牆 XML 變得能讀,或者再壓回去。 貼上 XML 即可按你偏好的縮排重新排版,也可以壓縮成單行。輸入時會即時校驗是否格式良好,計數器則告訴你文件裡有多少元素、嵌套了多深。
這正是 XML 格式化與 JSON 格式化的分水嶺。在 JSON 中,詞法單元之間的空白沒有含義,刪掉永遠安全。而在 XML 中,<name> 和 Ada 之間的字元屬於該元素文本節點的一部分。重新縮排一份文件,技術上就是改變了它的內容。
實際上這幾乎從不構成問題,因為絕大多數 XML 使用的是「純元素內容」——元素裡只包含其他元素,別無他物——這種情況下週圍的空白對任何 schema 都是可忽略的。格式化只在這類元素內部新增縮排。當某個元素裝的是真正的文本,或者像 HTML 那樣文本與子元素混排時,它的內容會被原樣保留。就是這一條規則,讓 <p>Hello <b>there</b></p> 不會在 there 兩邊悄悄多出空格。
這裡做的檢查是「格式良好」,也就是 XML 規範要求每個解析器都必須執行的那一層:有且僅有一個根元素、所有標籤都閉合且正確巢狀、屬性值加引號、文本中的 & 和 < 已轉義。任何一條不滿足,文件就會被直接拒絕——和 HTML 不同,XML 出了名地沒有容錯恢復。
「有效」則是更進一步的要求:它追問文件是否符合某份 DTD、XSD 或 RelaxNG schema,從而確保 <invoice> 裡確實有 <total>、日期確實是日期。這需要 schema 本身,而它並不在你貼上進來的文件裡。這裡顯示通過,意味著語法沒問題、任何解析器都能讀;但並不意味著接收方系統會認為內容是對的。
壓縮會移除元素之間可忽略的空白,把整份文件放到一行。由於這些空白本來就不是內容,純元素結構的輸出解析出來的樹完全相同。
另一部分節省來自空元素:<summary></summary> 和 <summary/> 被規範定義為等價,輸出時採用較短的寫法。收益真實但有限——XML 的體積大頭花在重複的標籤名上,因為每個元素都要把名字寫兩遍。如果檔案真的需要變小,答案是 gzip,它處理這些重複名字的效果遠勝於任何空白刪除。另外記得留一份格式化的副本用來閱讀,壓縮後的 XML 對人來說基本不可讀。