\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なしでは、<、>、& 文字をそれぞれ <、>、& としてエスケープする必要があります。
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フィードジェネレーターで作業する際に不可欠です。