私はしばしばこの奇妙なCDATA
タグをXML
ファイルで見つけます:
<![CDATA[some stuff]]>
このCDATA
タグが常に最初に来て、その後にいくつかのものが続くことに気づきました。
ただし、使用される場合と使用されない場合があります。それがsome stuff
その後に挿入される「データ」であることをマークすることだと思います。しかし、どのようなデータsome stuff
ですか?XMLタグで何かを書いても何かのデータはありませんか?
私はしばしばこの奇妙なCDATA
タグをXML
ファイルで見つけます:
<![CDATA[some stuff]]>
このCDATA
タグが常に最初に来て、その後にいくつかのものが続くことに気づきました。
ただし、使用される場合と使用されない場合があります。それがsome stuff
その後に挿入される「データ」であることをマークすることだと思います。しかし、どのようなデータsome stuff
ですか?XMLタグで何かを書いても何かのデータはありませんか?
回答:
CDATAはCharacter Dataの略で、これらの文字列の間にあるデータには、XMLマークアップとして解釈される可能性があるが、そうではないデータが含まれていることを意味します。
CDATAとコメントの主な違いは次のとおりです。
]]>
(CDEnd
)を含めることはできませんが、コメントで--
は無効です。これは、1つの整形式ドキュメントからの次の4つのXMLスニペットを考えると、
<!ENTITY MyParamEntity "Has been expanded">
<!--
Within this comment I can use ]]>
and other reserved characters like <
&, ', and ", but %MyParamEntity; will not be expanded
(if I retrieve the text of this node it will contain
%MyParamEntity; and not "Has been expanded")
and I can't place two dashes next to each other.
-->
<![CDATA[
Within this Character Data block I can
use double dashes as much as I want (along with <, &, ', and ")
*and* %MyParamEntity; will be expanded to the text
"Has been expanded" ... however, I can't use
the CEND sequence. If I need to use CEND I must escape one of the
brackets or the greater-than sign using concatenated CDATA sections.
]]>
<description>An example of escaped CENDs</description>
<!-- This text contains a CEND ]]> -->
<!-- In this first case we put the ]] at the end of the first CDATA block
and the > in the second CDATA block -->
<data><![CDATA[This text contains a CEND ]]]]><![CDATA[>]]></data>
<!-- In this second case we put a ] at the end of the first CDATA block
and the ]> in the second CDATA block -->
<alternative><![CDATA[This text contains a CEND ]]]><![CDATA[]>]]></alternative>
if (a[b[c]]>10) { }
。
CDATAセクションは、「パーサーがマークアップではなく文字データのみとして解釈するようにマークされている要素コンテンツのセクションです。」
構文的には、コメントと同様に動作します。
<exampleOfAComment>
<!--
Since this is a comment
I can use all sorts of reserved characters
like > < " and &
or write things like
<foo></bar>
but my document is still well-formed!
-->
</exampleOfAComment>
...しかし、それはまだ文書の一部です:
<exampleOfACDATA>
<![CDATA[
Since this is a CDATA section
I can use all sorts of reserved characters
like > < " and &
or write things like
<foo></bar>
but my document is still well formed!
]]>
</exampleOfACDATA>
次の.xhtml
ファイルを(ではなく .html
)ファイルとして保存し、FireFox(Internet Explorerではなく)を使用して開いて、コメントとCDATAセクションの違いを確認してください。ブラウザーでドキュメントを表示してもコメントは表示されませんが、CDATAセクションは次のようになります。
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" >
<head>
<title>CDATA Example</title>
</head>
<body>
<h2>Using a Comment</h2>
<div id="commentExample">
<!--
You won't see this in the document
and can use reserved characters like
< > & "
-->
</div>
<h2>Using a CDATA Section</h2>
<div id="cdataExample">
<![CDATA[
You will see this in the document
and can use reserved characters like
< > & "
]]>
</div>
</body>
</html>
CDATAセクションで注意すべき点は、エンコーディングがないため、文字列]]>
をセクションに含める方法がないことです。を含むすべての文字データは]]>
-私の知る限り-代わりにテキストノードでなければなりません。同様に、DOM操作の観点からは、次を含むCDATAセクションを作成できません]]>
。
var myEl = xmlDoc.getElementById("cdata-wrapper");
myEl.appendChild(xmlDoc.createCDATASection("This section cannot contain ]]>"));
このDOM操作コードは、例外をスローするか(Firefoxの場合)、または構造化されていないXMLドキュメントになります:http : //jsfiddle.net/9NNHA/
1つの大きなユースケース:xmlにはデータとしてプログラムが含まれています(JavaのWebページチュートリアルなど)。そのような状況では、データに「&」と「<」を含む大きな文字の塊が含まれていますが、これらの文字はxmlである必要はありません。
比較:
<example-code>
while (x < len && !done) {
print( "Still working, 'zzz'." );
++x;
}
</example-code>
と
<example-code><![CDATA[
while (x < len && !done) {
print( "Still working, 'zzzz'." );
++x;
}
]]></example-code>
特に、このコードをファイルから(またはプリプロセッサーに含めて)コピー/貼り付ける場合は、XMLファイルに必要な文字を含めるだけで、XMLタグ/属性と混同しないようにすると便利です。@paaryで述べたように、アンパサンドを含むURLを埋め込む場合には、他の一般的な用途が含まれます。最後に、データにいくつかの特殊文字しか含まれていなくても、データが非常に長い場合(たとえば、章のテキスト)、xmlファイルを編集するときにこれらの少数のエンティティをエンコードまたはデコードする必要がないのは素晴らしいことです。 。
(コメントとの比較はすべて、誤解を招く/役に立たないと思われます。)
HTMLコードを格納するためにxml要素が必要な場合、CDATAを使用する必要がありました。何かのようなもの
<codearea>
<![CDATA[
<div> <p> my para </p> </div>
]]>
</codearea>
したがって、CDATAは、<や>などのXMLタグとして解釈される可能性がある文字を無視することを意味します。
ウィキペディアから:
[In] XMLドキュメントまたは外部解析エンティティでは、CDATAセクションは要素コンテンツのセクションであり、パーサーがマークアップではなく文字データとして解釈するためにマークされます。
したがって、CDATA内のテキストはパーサーに表示されますが、XMLノードではなく文字としてのみ表示されます。
その使用の別の例として:
RSSフィード(xmlドキュメント)があり、説明の表示に基本的なHTMLエンコードを含めたい場合は、CDataを使用してエンコードできます。
<item>
<title>Title of Feed Item</title>
<link>/mylink/article1</link>
<description>
<![CDATA[
<p>
<a href="/mylink/article1"><img style="float: left; margin-right: 5px;" height="80" src="/mylink/image" alt=""/></a>
Author Names
<br/><em>Date</em>
<br/>Paragraph of text describing the article to be displayed</p>
]]>
</description>
</item>
RSSリーダーは説明を取り込み、CDATA内でHTMLをレンダリングします。
注-すべてのHTMLタグが機能するわけではありません-使用しているRSSリーダーに依存すると思います。
そして、この例がCData(および適切なpubDataおよびdc:creatorタグではない)を使用する理由の説明として:これは、実際のフォーマットコントロールのないRSSウィジェットを使用したWebサイト表示用です。
これにより、新しいウィジェットを必要とせずに、含まれる画像の高さと位置を指定したり、作成者名と日付を正しくフォーマットしたりすることができます。これはまた、これをスクリプト化でき、手動で追加する必要がないことも意味します。
通常、画像や音声データなどのカスタムデータをXMLドキュメントに埋め込むために使用されます。
Cdataは、XMLパーサーに渡したいが、XMLとして解釈されないデータです。
たとえば、次のように言います:-質問/回答オブジェクトをカプセル化したxmlがあります。そのようなオープンフィールドには、基本的なデータタイプまたはxmlで定義されたカスタムデータタイプに厳密に該当しない任意のデータを含めることができます。以下のような- これはXMLコメントのための正しいタグですか? .-- xmlパーサーによって別の子要素として解釈されずに、そのまま渡す必要がある場合があります。ここでCdataが役に立ちます。Cdataとして宣言することで、パーサーはラップされたデータをxmlとして扱わないように指示します(1つのように見える場合もあります)