HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

XMLのCDATAセクション

話題としてはいまさらな話なのだが‥

XMLのCDATAセクションの書き方を度忘れしてしまい、仕様書をひっくり返さずにググってみたら、トンデモな記事を見つけた。

XML の CDATA 中では ]]> のエスケープが必要

まぁ、諸悪の根源はこっちなんだろうけど‥

http://www.asahi-net.or.jp/~ps8a-okzk/xml/xml_2/escape.html

これらを見ると、

CDATAセクションは、 <や&をエスケープしなくてよい場所ですが、 ]]>という文字列が含まれる場合には ]]&gt;のようにエスケープする必要があります。

と書いてあるのだが、CDATAセクション内でエスケープするという考え方は存在しない。

そもそも、XML仕様書を見ると、CDATAセクションの定義は明らか。

Extensible Markup Language (XML) 1.0 (Fifth Edition)

CDATAセクションの中では、']]>'のみが特別視され、それ以外は書かれた文字そのものとして処理する。

どうしても']]>'という文字列データを書きたい場合は、この文字列を2つのパートに分けるしかない。

<![CDATA[]]]]><![CDATA[>]]>
<![CDATA[]]]><![CDATA[]>]]>

']]>'で終わる場合は2個目のCDATAセクションを書くのも面倒なのでということで。(XMLデータを生成するプログラムを作る場合には処理が面倒になるだけなので不向きだけど‥)

<![CDATA[]]]]>&gt;


さらに調べてみたら、同じサイトに対して突っ込んでいるブログを見つけた‥

[web][xml] CDATA セクション内に ]]> | Thu, Jul 7. 2005 - 氾濫原 [HANRANGEN]

まぁ、実はCDATAセクションの書き方が微妙に間違っているんだけど‥