XML හි <! [CDATA []]> යන්නෙන් අදහස් කරන්නේ කුමක්ද?


1026

මම බොහෝ විට ලිපිගොනු වල මෙම අමුතු CDATAටැගය සොයා ගතිමි XML:

<![CDATA[some stuff]]>

මෙම CDATAටැගය සැමවිටම ආරම්භයේදීම පැමිණෙන බව මම නිරීක්ෂණය කර ඇත්තෙමි .

නමුත් සමහර විට එය භාවිතා වේ, සමහර විට එය එසේ නොවේ. මම සිතන්නේ එය some stuffපසුව ඇතුළත් කරනු ලබන "දත්ත" ලෙස සලකුණු කිරීමයි. නමුත් කුමන ආකාරයේ දත්තද some stuff? මම XML ටැග් වලින් ලියන කිසිවක් කිසියම් දත්තයක් නොවේද?

Answers:


955

CDATA යනු අක්ෂර දත්ත සඳහා වන අතර එයින් අදහස් වන්නේ මෙම නූල් අතර ඇති දත්ත වලට XML සලකුණු ලෙස අර්ථ දැක්විය හැකි දත්ත ඇතුළත් වන නමුත් එසේ නොවිය යුතුය.

CDATA සහ අදහස් අතර ඇති ප්‍රධාන වෙනස්කම්:

මෙයින් අදහස් කරන්නේ හොඳින් සකස් කරන ලද එක් ලේඛනයකින් මෙම 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>

35
CEND අනුක්‍රමයේ චරිතයක් ගැලවිය හැක්කේ කෙසේද?
තෝමස් වෙල්ලර්

23
සහ සංයුක්ත කිරීම සඳහා ඔබට සීඩීඒටීඒ කොටස් දෙකක් තිබිය ]]යුතුය >- කෙසේද සහ සුදු ජාතිකයින් සඳහා මෙම පිළිතුර බලන්න .
ෂෝන් වීරා

2
CDATA ආරම්භය සහ අමු දත්ත අතර නව රේඛා චරිතයක් තිබිය යුතුද?
බෙන් සෙවාර්ඩ්ස්

2
නැත en බෙන්සෙවර්ඩ්ස්
ෂෝන්

5
එබැවින් මෙම C වැනි කේත කැබැල්ල පහසුවෙන් CDATA කොටසකට දැමිය නොහැක : if (a[b[c]]>10) { }.
ඇන්ඩර්ස් ටෝර්න්බ්ලාඩ්

342

සීඩීඒටීඒ අංශය යනු " අක්ෂර වින්‍යාසය නොව අක්ෂර දත්ත ලෙස පමණක් අර්ථ නිරූපණය කිරීම සඳහා විග්‍රහ කරන්නාට සලකුණු කර ඇති මූලද්‍රව්‍ය අන්තර්ගතයේ කොටසකි. "

සින්ටැක්ටිකල් ලෙස, එය අදහස් දැක්වීමකට සමානව ක්‍රියා කරයි:

<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 ) සහ 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 හැසිරවීමේ කේතය ව්‍යතිරේකයක් (ෆයර්ෆොක්ස් හි) විසි කරයි හෝ දුර්වල ලෙස ව්‍යුහගත XML ලේඛනයක් ඇති කරයි: http://jsfiddle.net/9NNHA/


3
CDATA හි "ý" ඉඩ නොදෙන්නේ ඇයි?
bjan

11
jbjan - එය නීති විරෝධී චරිතයක් යැයි ඔබ සිතන්නේ කුමක් ද? ඔබට කේතීකරණ ගැටලුවක් ඇති බව පෙනේ.
රිචඩ් ජේ පී ලෙ ගුන්

මම ලේඛනය IE හි විවෘත කළෙමි, මම ද MSXML විග්‍රහකය භාවිතා කරමි, එය අවලංගු චරිතයක් ලෙස ප්‍රකාශයට පත් කළෙමි. මට xsd එකක් ඇති අතර එය "type =" xs: string "" ලෙස ප්‍රකාශයට පත් කෙරේ. එය කේතන ක්‍රමයට හෝ xml අනුවාදයට සම්බන්ධද?
bjan

CDATA විග්‍රහ කර ඇති අතර වලංගු අක්ෂර පරාසයක් පමණක් මෙහි අවසර දී ඇත, එය සලකුණු ලෙස හඳුනාගත හැකි අක්ෂර අඩංගු පෙළ කොටස් වලින් ගැලවීමට භාවිතා කරයි
bjan

1
එබැවින් අපට HTML ලේඛනය තුළට HTML කිහිපයක් හොර රහසේ ගෙනයාමට CDATA භාවිතා කළ හැකිය, එවිට HTML විසින් XML ලේඛන ව්‍යුහය ව්‍යාකූල නොකරනු ඇත, පසුව XSLT භාවිතා කර එය පිටතට ගෙන එය ප්‍රතිදානය වන HTML ලේඛනයකට කෙළ ගසන්න.
Kaz

69

එක් විශාල භාවිත අවස්ථාවක්: ඔබේ xml හි දත්ත ලෙස වැඩසටහනක් ඇතුළත් වේ (උදා: ජාවා සඳහා වෙබ් පිටු නිබන්ධනයක්). එවැනි තත්වයක් තුළ ඔබේ දත්තවලට '&' ​​සහ '<' ඇතුළත් විශාල අක්ෂර ඇතුළත් වන නමුත් එම අක්ෂර xml ලෙස අදහස් නොකෙරේ.

සසඳන්න:

<example-code>
while (x &lt; len &amp;&amp; !done) {
    print( &quot;Still working, &apos;zzz&apos;.&quot; );
    ++x;
    }
</example-code>

සමග

<example-code><![CDATA[
while (x < len && !done) {
    print( "Still working, 'zzzz'." );
    ++x;
    }
]]></example-code>

විශේෂයෙන් ඔබ මෙම කේතය ගොනුවකින් පිටපත් කිරීම / ඇලවීම (හෝ එය පෙර සකසනයක ඇතුළුව) නම්, ඔබේ xml ගොනුවේ ඔබට අවශ්‍ය අක්ෂර තිබීම සතුටක්, ඒවා XML ටැග් / ගුණාංග සමඟ පටලවා ගන්න. @Pary සඳහන් කළ පරිදි, ඔබ ඇම්පියර්සෑන්ඩ් අඩංගු URL ඇතුළත් කරන විට වෙනත් පොදු භාවිතයන් ඇතුළත් වේ. අවසාන වශයෙන්, දත්තවල විශේෂ අක්ෂර කිහිපයක් පමණක් තිබුණද, දත්ත ඉතා දිගු වුවද (පරිච්ඡේදයක පා say ය, කියන්න), ඔබ ඔබේ xml ගොනුව සංස්කරණය කරන විට එම ආයතන කිහිපය එන් / ඩී කේතනය නොකිරීම සතුටක්. .

(අදහස් දැක්වීම් සමඟ සැසඳීම් සියල්ලම නොමඟ යවන / උදව් කළ නොහැකි යැයි මම සැක කරමි.)


41

HTML කේත ගබඩා කිරීම සඳහා මගේ xml මූලද්‍රව්‍යය අවශ්‍ය වූ විට මට වරක් CDATA භාවිතා කිරීමට සිදුවිය. වගේ දෙයක්

<codearea>
  <![CDATA[ 
  <div> <p> my para </p> </div> 
  ]]>
</codearea>

එබැවින් CDATA යනු <සහ> වැනි XML ටැග් ලෙස අර්ථ දැක්විය හැකි ඕනෑම චරිතයක් නොසලකා හරිනු ඇත.


2
"ටැගය" නොව පළමු වාක්‍යයේ මූලද්‍රව්‍යය.
ලුඩොවික් කුටි

32

එහි අඩංගු දත්ත XML ලෙස විග්‍රහ නොකරනු ඇති අතර, වලංගු XML විය යුතු නැත. නැතහොත් XML ලෙස පෙනෙන නමුත් එසේ නොවන මූලද්‍රව්‍ය අඩංගු විය හැකිය.


16

විකිපීඩියාවෙන්:

[XML] ලේඛනයක හෝ බාහිර විග්‍රහ කරන ලද වස්තුවක, CDATA කොටස යනු මූලද්‍රව්‍ය අන්තර්ගතයේ කොටසකි, එය විග්‍රහ කරන්නාට සලකුණු කර ඇත්තේ අක්ෂර දත්ත මිස සලකුණු කිරීම නොවේ.

http://en.wikipedia.org/wiki/CDATA

මේ අනුව: CDATA තුළ ඇති පා par ය පාර්සර් විසින් දකිනු ඇති නමුත් XML නෝඩ් ලෙස නොව අක්ෂර ලෙස පමණි.


15

එහි භාවිතයට තවත් උදාහරණයක් ලෙස:

ඔබට 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: නිර්මාතෘ ටැග් නොවේ): මෙය වෙබ් අඩවි ප්‍රදර්ශනය සඳහා RSS විජට් එකක් භාවිතා කරමින් අපට සැබෑ හැඩතල ගැන්වීමේ පාලනයක් නොමැත.

නව විජට් එකක අවශ්‍යතාවයකින් තොරව ඇතුළත් කළ රූපයේ උස හා පිහිටීම සඳහන් කිරීමට, කර්තෘගේ නම් සහ දිනය නිවැරදිව සංයුති කිරීමට සහ යනාදිය මෙමඟින් අපට හැකියාව ලැබේ. එයින් අදහස් කරන්නේ මට මෙය ස්ක්‍රිප්ට් කළ හැකි අතර ඒවා අතින් එකතු කළ යුතු නැත.


10

CDATA යනු අක්‍ෂර දත්ත වේ. සාමාන්‍ය XML ලෙස සලකනු ලබන සමහර අක්ෂර වලින් ගැලවීමට ඔබට මෙය භාවිතා කළ හැකිය. මෙහි ඇති දත්ත විග්‍රහ නොකරනු ඇත. උදාහරණයක් ලෙස, ඔබට එහි අඩංගු URL එකක් සම්මත කිරීමට අවශ්‍ය නම් &, ඔබට එය කිරීමට CDATA භාවිතා කළ හැකිය. එසේ නොමැතිනම්, ඔබට සාමාන්‍ය XML ලෙස විග්‍රහ කෙරෙන බැවින් ඔබට දෝෂයක් ලැබෙනු ඇත.


6

එය එක්ස්එම්එල් ලෙස දැකිය හැකි දත්ත අඩංගු කිරීමට භාවිතා කරයි.

මේ ආකාරයෙන් ඇතුළත දත්ත දර්ශනය වනු ඇත, නමුත් අර්ථ නිරූපණය නොකෙරේ.


5

එය සුපුරුදු පරිදි XML වෙත යැවිය නොහැකි නූලකින් ගැලවී යයි:

උදාහරණයක්:

නූල එහි "&" අඩංගු වේ.

ඔබට නොහැකියි:

<FL val="Company Name">Dolce & Gabbana</FL>

එබැවින් ඔබ CDATA භාවිතා කළ යුතුය:

<FL val="Company Name"> <![CDATA["Dolce & Gabbana"]]> </FL>

1

සාමාන්‍යයෙන් XML ලේඛනයක් තුළ පින්තූර හෝ ශබ්ද දත්ත වැනි අභිරුචි දත්ත කාවැද්දීම සඳහා භාවිතා වේ.


3
ඔබට පෙළ-කේතනය කළ ද්විමය දත්ත CDATA කොටසක තැබිය හැකි වුවද, ඔබට එය අවශ්‍ය නොවේ, මන්ද CDATA හට ද්විමය කිසිවක් සමඟ කෙලින්ම සම්බන්ධයක් නැත.
ජොයෙල් මුලර්

1

Cdata යනු ඔබට xml විග්‍රහකය වෙත යැවීමට අවශ්‍ය දත්ත වන අතර එය තවමත් xml ලෙස අර්ථ නිරූපණය නොකෙරේ.

උදා: සඳහා කියන්න: - ඔබට xml එකක් ඇති අතර එය ප්‍රශ්න / පිළිතුරු වස්තුවක් ආවරණය කරයි. එවැනි විවෘත ක්ෂේත්‍රයන්ට මූලික දත්ත වර්ගයට හෝ xml අර්ථ දක්වා ඇති අභිරුචි දත්ත වර්ගවලට යටත් නොවන ඕනෑම දත්තයක් තිබිය හැකිය. වැනි - මෙය xml අදහස් දැක්වීම සඳහා නිවැරදි ටැගයක්ද? .-- xml විග්‍රහකය වෙනත් ළමා අංගයක් ලෙස අර්ථ නිරූපණය නොකර එය සම්මත කිරීමට ඔබට අවශ්‍යතාවයක් තිබිය හැකිය. මෙන්න Cdata ඔබේ ගැලවීමට පැමිණේ. Cdata ලෙස ප්‍රකාශ කිරීමෙන් ඔබ කියන්නේ පාර්සර් විසින් ඔතා ඇති දත්ත xml ලෙස නොසලකන ලෙසයි (එය එකක් මෙන් පෙනුනද)


0

බව සටහන CDATAමෙම XML පෙළ ගොනුවක් කෙලින්ම පෙළ තැබීමෙන් නම් ඉදිකිරීමක් පමණක් අවශ්ය වේ.

එනම්, ඔබ භාවිතා කළ CDATAයුත්තේ එක්ස්එම්එල් පෙළ කෙලින්ම ටයිප් කිරීම හෝ ක්‍රමලේඛනය කිරීම පමණි.

XML අන්තර්ගත නීති රීති වලක්වා ගැනීම සඳහා DOM ප්‍රොසෙසර් API හෝ SimpleXML භාවිතා කර ඇතුළත් කරන ඕනෑම පෙළක් ස්වයංක්‍රීයව ගැලවී යනු ඇත.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.