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 & 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の重要なポイント:
- CDATAはリテラルテキストを保持する。 CDATAセクション内では、
<、>、&はXMLマークアップとして扱われません。そのため、すべての特殊文字をエスケープせずに生のHTMLやコードを埋め込めます。 - JSONではCDATAはプレーン文字列になる。 CDATAラッパーが除去され、コンテンツはJSON文字列値になります。
- CDATA内で唯一禁止されるシーケンスは
]]>で、これはCDATAセクションを終了させます。
JSONからXMLに変換する場合:
JSON文字列にXMLで特殊な文字(<、>、&)が含まれている場合、コンバーターには2つの選択肢があります:
| 戦略 | "x < 10" の出力 |
|---|---|
| エンティティエスケープ | <value>x < 10</value> |
| CDATAラッピング | <value><![CDATA[x < 10]]></value> |
CDATAが望ましい場合: 文字列にHTMLやコードが大量に含まれる場合、XMLの可読性が重要な場合。 エンティティエスケープが望ましい場合: 文字列が短く特殊文字が少ない場合、XMLをよりコンパクトにしたい場合。
ユースケース
HTMLマークアップを含むブログ記事コンテンツをXMLベースのCMSフィードに保存する場合。HTMLはマークアップ構造を壊すエンティティエンコーディングなしでそのまま保持する必要があります。