§

貼上 XML

§

選項

模式
縮排
XML 宣告
自閉合空元素標籤
§

格式化輸出

xml

在台灣的軟體現場,XML 美化輸出依舊每天都用得到:自由時報、聯合新聞網、ETtoday 的 RSS feed 需要排版乾淨才便於聚合;經濟部標準檢驗局推動的 GovXML schema 與內政部地政司的不動產地籍 XML 都需嚴格縮排;統一發票電子發票 (uniform invoice) MIG3.2 的 XML 格式、證交所與櫃買中心要求上市櫃公司繳交的 XBRL 財報、中華電信 HiNet 與是方電訊的 SOAP 加值服務介接,都常需要工程師目視除錯;MOEA 的開放資料平台也以 XML 釋出公務統計,本地工具讓敏感資料不必經過外部 SaaS。

什麼是 XML 格式化?

XML(Extensible Markup Language,可延伸標記語言)是 W3C 制定的結構化文件與資料交換文字格式。格式化——又稱美化輸出或 beautify——讀入格式良好的 XML 原始碼並重新縮排,讓每個元素、屬性、註解、處理指令與 CDATA 區段都便於瀏覽。解析後的文件樹完全保持不變,只有元素之間的空白會改變。

XML 格式化是如何運作的?

你的輸入完全在瀏覽器中處理,使用原生的 DOMParserXMLSerializer API,再加上一個自訂的遞迴縮排器。主要步驟如下:

  1. 你的輸入按位元組從文字框讀取——貼進去的每一個位元組都只保留在本機記憶體中。
  2. 瀏覽器使用 new DOMParser().parseFromString(text, 'application/xml') 解析它。若輸入不是格式良好的 XML,解析器會插入一個 <parsererror> 節點,其文字內容承載引擎提供的行號與欄號——這些資訊會原樣顯示在錯誤條中。
  3. 解析成功後,自訂縮排器以深度優先方式走訪 DOM 樹,把每個元素、屬性集合、CDATA 區段、註解與處理指令依當前深度各自獨佔一行。如果啟用相關選項,空元素會以自閉合形式呈現。
  4. 壓縮模式反轉此流程:XMLSerializer().serializeToString(doc) 輸出單行形式,再以一條帶有護欄的正則移除元素之間的空白,且不影響 CDATA 區塊內或非空白文字節點中的內容。
  5. 輸出寫入唯讀文字框,錯誤條會被清空,下載按鈕則把結果包成可寄送或附在工單上的 .xml 檔。

為什麼使用此工具美化 XML?

  • 隱私:每一次解析、格式化與壓縮都在你的瀏覽器中完成。XML 從不進入我們的伺服器——無上傳、無遙測、免註冊。
  • 精準的錯誤:輸入不合規時,解析器會原樣展示瀏覽器引擎自己回報的行號與欄號,而非臆測——和你在 DevTools 看到的一致。
  • 忠實的往返:先格式化再壓縮,你會得到與原文件位元組等價的結果(僅受 XML 宣告選項影響)——格式化不會重新正規化命名空間,也不會改寫屬性順序。
  • 速度快:純 DOMParser 加上約 60 行的縮排器即可瞬間處理多 MB 的 SOAP envelope 與 OOXML 片段,無需下載任何外部函式庫。

XML 格式化有哪些常見應用?

XML 美化輸出在網頁發佈、企業整合與資料歸檔中隨處可見:

  • RSS / Atom feed 檢視:貼上播客或新聞 feed 的內容,發佈前確認 channel 中繼資料、item 順序與命名空間前綴。
  • SOAP 除錯:把從 Wireshark 或 SOAP 客戶端日誌複製的 envelope 格式化,讓 Header、Body 與 Fault 一目了然。
  • Sitemap 稽核:重新縮排從競品或自家測試站取得的 sitemap.xml,清點條目數量並核對每個 URL 的 hreflang 替代版本。

XML 格式化的範例長什麼樣?

把三個元素的 <feed><entry><title>Hello</title></entry></feed> 貼進來,選擇 2 空格縮排並按下 格式化,會得到四行文件,每個元素各佔一行並依深度縮排。對同一輸入切換到 Minify 就會折回原始位元組字串。任何格式良好的文件都能無損往返。

可以離線運作嗎?

可以。格式化與壓縮流程是純 DOMParser + XMLSerializer 加上極小的遞迴縮排器,全部在瀏覽器分頁內運作。任何內容都不會上傳,沒有 Service Worker 代理你的輸入,格式化步驟本身不會發出任何網路請求。唯一對外流量是標準的頁面資源(CSS、字型、分析腳本)——你的 XML 從不抵達 Ultim8Soft。

格式化會改變文件嗎?

不會發生語意變化。格式化只重寫元素之間的空白。元素名稱、屬性值、文字內容、CDATA 載荷、註解與處理指令都按位元組保留。命名空間宣告與前綴完全沿用輸入——格式化器不會重新正規化或重排屬性。除可選的 XML 宣告開關外,輸出與輸入解析出的 DOM 樹完全相同。

CDATA / 註解 / 處理指令如何處理?

三者都依當前縮排深度原樣輸出在各自一行上。CDATA 載荷被包裹於 <![CDATA[…]]> 之中,內部不進行任何重新縮排——規範規定 CDATA 內容是不透明的,因此格式化器從不觸碰。註解使用 <!-- … -->,處理指令使用 <?target data?>。三類節點在 格式化 → 壓縮 → 格式化 的往返後內容完整保留。

格式化與壓縮 XML 有什麼差異?

格式化把空白展開,便於人類閱讀文件樹;壓縮則把空白移除,便於傳輸與儲存。兩者都作用在解析後的 DOM 上,而非原始位元組字串,因此對一份格式良好的文件執行 格式化 → 壓縮 的往返,會得到與原始壓縮形式位元組等價的結果。需要閱讀或 diff XML 時用格式化;需要透過計費 API gateway 傳輸或嵌入另一份文件時用壓縮。

這個 XML 格式化器使用與瀏覽器處理 AJAX XHR 回應與 SVG 文件相同的解析器,因此任何格式良好的 XML——RSS、Atom、SOAP、sitemap、OOXML、SVG——都能乾淨往返。在上方貼上任意 XML,複製輸出,或將其下載為 .xml