\n\n\nCDATAなしでは、<、>、& 文字をそれぞれ <、>、& としてエスケープする必要があります。\n\n### CDATA vs. エンティティエスケープ\n\n| アプローチ | 利点 | 欠点 |\n|-----------|------|------|\n| CDATA | コード/HTMLコンテンツに対して読みやすい | リテラル ]]> を含められない |\n| エンティティエスケープ | どこでも動作 | コードブロックでは読"}},{"@type":"Question","name":"When is this useful?","acceptedAnswer":{"@type":"Answer","text":"CDATA処理は、XMLフィード内にHTMLを格納するコンテンツ管理システム、設定ファイルにスクリプトを埋め込むビルドシステム、XMLコンテナ内にコードやマークアップを転送するデータ移行ツール、記事の完全なHTMLを含むRSS/Atomフィードジェネレーターで作業する際に不可欠です。"}}]}

XML CDATAセクション — 使用タイミングと方法

エスケープなしで生テキスト、HTML、コードを埋め込むためのXML CDATAセクションを理解します。CDATA構文、ネスト制限、フォーマットの考慮事項、CDATAとエンティティエスケープの使い分けを解説します。

Advanced

詳細な説明

XML CDATAセクション

CDATA(Character Data)セクションは、XMLで通常エスケープが必要なテキストをそのまま含めることができます。CDATAセクション内のコンテンツはリテラルテキストとして扱われ、XMLパーサーはマークアップとして解釈しません。

CDATA構文

<script>
<![CDATA[
  function compare(a, b) {
    if (a < b && b > 0) {
      return a & b;
    }
  }
]]>
</script>

CDATAなしでは、<>& 文字をそれぞれ &lt;&gt;&amp; としてエスケープする必要があります。

CDATA vs. エンティティエスケープ

アプローチ 利点 欠点
CDATA コード/HTMLコンテンツに対して読みやすい リテラル ]]> を含められない
エンティティエスケープ どこでも動作 コードブロックでは読みにくい

CDATAを使用する場合:

  • XMLにHTML、JavaScript、SQL、その他のコードを埋め込む
  • コンテンツに多くの特殊文字が含まれる
  • 埋め込みコンテンツの人間の可読性が重要

エンティティエスケープを使用する場合:

  • テキストが短く特殊文字が少ない
  • コンテンツにリテラル文字列 ]]> が含まれる可能性がある
  • コンテンツをXMLパーサーで処理する必要がある

CDATAのネスト制限

CDATAセクションはネストできません。シーケンス ]]> はコンテキストに関係なく、常に現在のCDATAセクションを終了します:

<!-- エラー:CDATAの早期終了 -->
<![CDATA[
  ]]> を含むテキストはここで壊れます
]]>

回避策はコンテンツを分割することです:

<![CDATA[]]> を含むテキスト ]]]]><![CDATA[> はここで続きます]]>

CDATAコンテンツのフォーマット

良いXMLフォーマッターはCDATAコンテンツをそのまま保持します。CDATA内のコンテンツは再インデントや変更をすべきではありません。リテラルテキストであり、空白が重要な場合があるためです。

一般的な使用例のCDATA

  • RSSフィード: <content:encoded> でHTMLをCDATAにラップすることが多い
  • SOAPメッセージ: 埋め込みXMLまたはHTMLペイロード
  • 設定ファイル: SQLクエリ、スクリプトブロック、テンプレート文字列
  • データエクスポート: XML要素に埋め込まれたCSVまたはJSONデータ

ユースケース

CDATA処理は、XMLフィード内にHTMLを格納するコンテンツ管理システム、設定ファイルにスクリプトを埋め込むビルドシステム、XMLコンテナ内にコードやマークアップを転送するデータ移行ツール、記事の完全なHTMLを含むRSS/Atomフィードジェネレーターで作業する際に不可欠です。

試してみる — XML Formatter

フルツールを開く