返回 網站動態
DevTool Team

XML 驗證完整指南:XSD、DTD、API 與 CI 實戰

給開發與測試團隊的一篇實用教學:用最少步驟把 XML 驗證從手動排錯,升級成可自動化阻斷的流程。

如果 XML 常在上線後出問題,先看這篇

你可能遇過這些情況:

  • 本地看起來正常,上線卻被下游系統拒收
  • 只有少數檔案失敗,但足以造成部署回滾
  • 能 parse,不代表符合協議結構

這篇教學的目標是:給你一條可以直接落地的 XML 驗證流程。


5 分鐘版結論

照這個順序做,最穩定:

  1. 先做 語法驗證
  2. 再做 XSD 或 DTD(二選一)
  3. 發版前做 批次驗證
  4. CI 以 錯誤碼 阻斷,不只看報錯文字

直接開始: 打開 XML 驗證工具


第一步:先清掉語法錯誤

不要一開始就上 XSD/DTD。語法錯誤沒處理,後面錯誤訊息會很吵。

常見例子:

<order>
  <item>Apple</item>
  <total>12.5</total>
</orders>

這是根標籤開閉不一致(order vs orders)。


第二步:XSD 與 DTD 怎麼選

選 XSD 的時機

  • 要求型別嚴格(如 decimal、date)
  • 要求順序與出現次數
  • 需要命名空間控制

選 DTD 的時機

  • 維護舊有 XML 合約
  • 需要輕量宣告式規則

目前 DTD 驗證可涵蓋:

  • ELEMENT 模型(序列/選擇/重複、EMPTY、ANY、mixed)
  • ATTLIST 屬性約束(#REQUIRED#FIXED、枚舉)
  • 內部 ENTITY 引用解析

範例:

<!ENTITY cat "cooking">
<!ELEMENT bookstore (book+)>
<!ELEMENT book (title,price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST book category (cooking|children) #REQUIRED>

第三步:批次驗證一定要做

單檔通過不代表可上線。真正踩坑常在「大部分通過、少數失敗」。

發版前建議固定做:

  • 全量待發布檔案一起驗
  • 保留逐檔錯誤明細
  • 任一失敗即阻斷(fail-fast)

第四步:API 接入 CI/CD

單檔接口

curl -X POST https://www.ilovedevtool.com/api/xml/validate \
  -H "Content-Type: application/json" \
  -d '{
    "xml": "<order><item>Apple</item><total>12.5</total></order>",
    "xsd": "<xs:schema .../>"
  }'

批次接口

curl -X POST https://www.ilovedevtool.com/api/xml/validate/jobs \
  -H "Content-Type: application/json" \
  -d '{
    "files": [
      {"fileName":"a.xml","xml":"<order>...</order>","xsd":"<xs:schema .../>"},
      {"fileName":"b.xml","xml":"<bookstore>...</bookstore>","dtd":"<!ELEMENT bookstore ...>"}
    ],
    "options": {"outputFormat":"all"}
  }'

注意:同一檔案項目建議 xsddtd 二選一。


建議接入 CI 的錯誤碼

  • XML_INVALID
  • XSD_INVALID
  • SCHEMA_MISMATCH
  • DTD_INVALID
  • DTD_MISMATCH
  • PAYLOAD_TOO_LARGE

重點:

  • 文案適合人工排查
  • 錯誤碼適合自動化判斷

常見誤區

  1. 以為「可解析」就等於「符合協議」
  2. 忽略少量失敗樣本
  3. 團隊沒有統一 XSD/DTD 使用規範
  4. 測試樣本含敏感資料未脫敏

上線前檢查清單(可直接貼 PR)

  • 語法驗證通過
  • XSD 或 DTD 驗證通過(同檔案只選一種)
  • 批次驗證通過(failed = 0
  • CI 使用錯誤碼阻斷
  • 關鍵報文樣本已納入回歸

下一步怎麼做

  1. 打開 XML 驗證工具
  2. 查看 DTD 子頁
  3. 查看 API 子頁
  4. 下載樣本做回歸

不需要一次做到 100 分。先把語法 + 單檔結構驗證跑順,再接批次與 CI。