Notepad++ 無法原生將 XML 轉換為 JSON —— 編輯器僅將 XML 檔案作為純文字開啟 —— 但將其與基於瀏覽器的 XML to JSON Converter 搭配使用,即可在本地產生可預期的 JSON,並保留屬性、文字與重複元素。其取捨在於 Notepad++ 並沒有內建解析器能將您的 XML 轉為 JSON 樹狀結構,因此多數工作流程會將文件複製到專門的轉換器中。基於瀏覽器的 XML to JSON Converter 正是為這種交接而設計:您從 Notepad++ 貼上一份格式正確的 XML 文件,選擇縮排格式,即可獲得保留屬性、命名空間與重複同層元素的確定性 JSON 表示。解析完全在您的瀏覽器中透過 MDN DOMParser 說明文件所描述的原生 DOMParser 進行,因此原始 XML 從不離開您的機器。由於 XML 與 JSON 之間並無通用的逐一對應對映,該工具採用明確的慣例:以 @attributes 代表屬性、以 #text 代表直接字元資料,您應將此契約與接收系統實際所期待的內容進行比對。

為何僅靠 Notepad++ 無法可靠地將 XML 轉換為 JSON
當您要求 Notepad++ 轉換內容時,它對您文件的結構並無感知 —— 尋找與取代是針對字元樣式運作,而非 XML 樹,正是這個落差使得通常需要獨立的轉換器。編輯器將每個緩衝區皆視為文字,這讓編輯保持快速,卻也排除了在同一工作階段內自動進行 XML 轉 JSON 的任何機會。
Notepad++ 內最常見的替代方案是 XML Tools 外掛,它透過外掛選單新增 Pretty print、Linearize 與 XPath 查詢等指令。它也提供 JSON View 選項,但該檢視僅在內容已為 JSON 時重新格式化當前檔案,並不會從 XML 緩衝區產生 JSON。該外掛中真正的 XML 轉 JSON 功能相當有限,因此多數使用者最終仍會將文件複製到獨立轉換器中處理。
手動的尋找與取代規則則更為脆弱。看似正確的樣式套用到另一個檔案時會在不知情的狀況下出錯:未加引號的屬性、重複的根元素、未閉合的 CDATA 區段、命名空間前綴以及混合內容元素,都會破壞天真的正規表示式取代。能逐步走訪文件樹的結構化轉換器可消除這些隱性失敗,並為您提供可與下游服務所期待的 JSON 契約比對的可重現對映。
透過瀏覽器工作流程在 Notepad++ 中將 XML 轉換為 JSON
- 在 Notepad++ 中開啟您的 XML 檔案,並檢查其具備格式正確的根元素、平衡的標籤,以及頂端沒有 DOCTYPE 宣告。若存在 <!DOCTYPE ...> 該行,請在繼續前將其刪除 —— 轉換器刻意拒絕 DOCTYPE 以避免外部實體展開。
- 選取整份文件 (在 Windows 上按 Ctrl + A,在 macOS 上按 Cmd + A),並將其複製到剪貼簿。
- 在相同的瀏覽器工作階段中開啟 XML to JSON Converter,並將文件貼到輸入區域。
- 選擇與您下游用途相符的 JSON 縮排樣式:用於傳輸的緊湊格式、用於一般 API 範例的兩空白,或用於易讀檢閱的四空白。
- 點擊 Convert to JSON。瀏覽器使用 DOMParser 解析 XML;若出現解析錯誤,工具會拒絕該文件,而非回傳部分結果。
- 檢視產生的 JSON,留意 @attributes 物件、文字與子元素並存時的 #text 鍵,以及取代重複同層元素的 JSON 陣列。
- 複製 JSON 輸出,並將其貼回 Notepad++ 的新分頁,以利後續編輯、驗證,或參考 Notepad++ JSON 格式化指南與前一版本進行比對。
轉換慣例如何將 XML 對映至 JSON
XML 與 JSON 之間並無通用的逐一對應對映,因此本轉換器寧可公開明確契約,也不宣稱採用標準。預先了解規則能讓您預測輸出結果,並在錯誤送至正式環境前及早察覺不一致之處。
| XML 來源 | JSON 輸出 |
|---|---|
| 元素的屬性 | 集中於該元素的 @attributes 物件之下 |
| 僅含文字內容的元素 | 裸的字串值 |
| 含屬性或子元素並帶有文字的元素 | 直接文字儲存於 #text 之下 |
| 單一子元素 | 單一值 (非陣列) |
| 多個同名的同層元素 | 依文件順序的 JSON 陣列 |
| 諸如 soap:Body 的命名空間前綴 | 在元素與屬性名稱中逐字保留 |
| 不帶屬性的空元素 | 空字串 |
| 帶屬性的空元素 | 僅含 @attributes 的物件 |
| CDATA 區段 | 其文字內容併入 #text |
| 註解與處理指令 | 不會複製到 JSON |
上述表格直接帶來兩個結果。首先,像是帶前置零的識別碼、像 "01.02" 這類版本字串,以及看似數字的郵遞區號等詞法值,皆會保留為 JSON 字串 —— 轉換器不會推斷數字、布林值或 null,因為在接收系統已將其視為文字的情況下,默默將文字標記轉為 1.02 或 true 會損壞資料。其次,重複的同層元素一律會成為陣列,而非巢狀的單一物件,因此若某個 REST 端點期待單一值,它絕不會在文件名稱重複時默默收到陣列。
轉換器刻意排除的項目
有幾項行為屬於刻意設計而非疏漏,它們會影響該工具是否為特定 Notepad++ 工作流程的合適選擇。
- 不解析 DOCTYPE 或外部實體。轉換器會拒絕以 <!DOCTYPE ...> 開頭的文件,且不會擷取 DTD、結構描述、樣式表或遠端命名空間。這能保護您免於 XML 外部實體攻擊這類威脅,並保持轉換在本地進行。
- 不自動進行型別轉換。絕不會從文字內容產生數字、布林值與 null。詞法上的 XML 值會保留為 JSON 字串。
- 不保留混合內容交錯。單一元素內部的直接文字與子元素順序會合併至 #text 與子元素名稱之下,但文字與標籤之間的精確交錯順序不會保留。
- 不傳遞註解或處理指令。註解與 <?pi?> 指令會在轉換過程中被捨棄。
- 200,000 字元的來源限制。超過此大小則需要在您自己的應用程式中使用串流或專屬解析器。
若您的下游消費者期待不同的慣例 —— 例如子元素一律為陣列、型別推斷、保留註解,或獨立的命名空間物件 —— 您將需要對 JSON 進行後處理,或挑選預設值符合該契約的程式庫。
瀏覽器轉換器與 Notepad++ 外掛:該如何選擇
正確的工具取決於文件大小、整合需求以及契約的嚴格程度。下表比較讀者在 Notepad++ 中工作時通常會考量的三種工作流程。
| 方法 | 轉換執行位置 | 最適用於 | 主要限制 |
|---|---|---|---|
| 基於瀏覽器的 XML to JSON Converter | 使用 DOMParser 的本機瀏覽器分頁 | API 範例、設定檢查、小型資料移轉、測試資料 | 200,000 字元的來源上限,且無法無損保留混合內容 |
| Notepad++ XML Tools 外掛 | 編輯器程序內部 | 美化列印、XPath 查詢,以及對已是 JSON 的檔案進行快速的 JSON 檢視 | 內建 XML 轉 JSON 功能有限;XML 必須語法上有效 |
| 於 Notepad++ 中手動尋找與取代 | 編輯器緩衝區內部 | 對不帶屬性、命名空間或重複元素的小片段進行一次性微調 | 在屬性、重複標籤、CDATA 與混合內容上會在不知情狀況下出錯 |
就常見情況 —— 一段 API 範例、設定檔、SOAP 信封片段,或是您於 Notepad++ 中開啟以進行編輯的測試資料 —— 瀏覽器工作流程讓文件留在您的機器上,套用已記載的對映,並回傳可直接貼回編輯器的 JSON,無需安裝任何新軟體。若您的文件超出輸入上限,或需要無損保留混合內容,則應將轉換作業移至版本控管的解析器中,而非仰賴外掛或尋找與取代。