XMLのCDATAセクションとJSONマッピング

XMLのCDATAセクションがエスケープされていないコンテンツを保持する仕組みと、JSON文字列へのマッピング方法を学びます。CDATAの使用タイミング、エスケープシーケンス、変換のベストプラクティスを解説します。

XML Features

詳細な説明

CDATA(Character Data)セクションは、そのままではエスケープが必要なテキストをXMLに含めることを可能にします。<![CDATA[...]]> マーカーで囲まれ、HTML、コードスニペット、XMLの特殊文字を含むテキストの埋め込みによく使用されます。

CDATAを含むXML:

<article>
  <title>Introduction to HTML</title>
  <content><![CDATA[
    <p>Use <strong>bold</strong> for emphasis.</p>
    <p>Entities like &amp; are written literally here.</p>
  ]]></content>
  <code><![CDATA[
    if (x < 10 && y > 5) {
      return true;
    }
  ]]></code>
</article>

JSONに変換すると:

{
  "article": {
    "title": "Introduction to HTML",
    "content": "\n    <p>Use <strong>bold</strong> for emphasis.</p>\n    ...",
    "code": "\n    if (x < 10 && y > 5) {\n      return true;\n    }\n  "
  }
}

CDATAの重要なポイント:

  1. CDATAはリテラルテキストを保持する。 CDATAセクション内では、<>& はXMLマークアップとして扱われません。そのため、すべての特殊文字をエスケープせずに生のHTMLやコードを埋め込めます。
  2. JSONではCDATAはプレーン文字列になる。 CDATAラッパーが除去され、コンテンツはJSON文字列値になります。
  3. CDATA内で唯一禁止されるシーケンス]]> で、これはCDATAセクションを終了させます。

JSONからXMLに変換する場合:

JSON文字列にXMLで特殊な文字(<>&)が含まれている場合、コンバーターには2つの選択肢があります:

戦略 "x < 10" の出力
エンティティエスケープ <value>x &lt; 10</value>
CDATAラッピング <value><![CDATA[x < 10]]></value>

CDATAが望ましい場合: 文字列にHTMLやコードが大量に含まれる場合、XMLの可読性が重要な場合。 エンティティエスケープが望ましい場合: 文字列が短く特殊文字が少ない場合、XMLをよりコンパクトにしたい場合。

ユースケース

HTMLマークアップを含むブログ記事コンテンツをXMLベースのCMSフィードに保存する場合。HTMLはマークアップ構造を壊すエンティティエンコーディングなしでそのまま保持する必要があります。

試してみる — JSON ↔ XML Converter

フルツールを開く