CDATA oznacza dane znakowe i oznacza, że dane pomiędzy tymi ciągami zawierają dane, które mogą być interpretowane jako znaczniki XML, ale nie powinny.
Najważniejsze różnice między CDATA a komentarzami to:
Oznacza to, biorąc pod uwagę te cztery fragmenty kodu XML z jednego dobrze sformułowanego dokumentu:
<!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>
]]
i>
- zobacz tę odpowiedź dla hows i dlaczego.if (a[b[c]]>10) { }
.Sekcja CDATA to „ sekcja zawartości elementu, która jest oznaczona, aby analizator składni mógł interpretować tylko dane znakowe, a nie znaczniki ”.
Składniowo zachowuje się podobnie do komentarza:
... ale nadal jest częścią dokumentu:
Spróbuj zapisać poniższe jako
.xhtml
plik ( nie.html
) i otwórz go za pomocą FireFox ( nie Internet Explorer ), aby zobaczyć różnicę między komentarzem a sekcją CDATA; komentarz nie pojawi się, gdy spojrzysz na dokument w przeglądarce, a sekcja CDATA:W sekcjach CDATA należy zwrócić uwagę na to, że nie mają one kodowania, więc nie ma możliwości włączenia do nich łańcucha
]]>
. Wszelkie dane znakowe, które zawierają,]]>
będą musiały - o ile mi wiadomo - być węzłem tekstowym. Podobnie z perspektywy manipulacji DOM nie można utworzyć sekcji CDATA, która zawiera]]>
:Ten kod manipulacji DOM spowoduje zgłoszenie wyjątku (w przeglądarce Firefox) lub spowoduje powstanie źle sformułowanego dokumentu XML: http://jsfiddle.net/9NNHA/
źródło
Jeden duży przypadek użycia: twój xml zawiera program jako dane (np. Samouczek strony internetowej dla Javy). W tej sytuacji twoje dane zawierają dużą część znaków, które zawierają „&” i „<”, ale te znaki nie mają być xml.
Porównać:
z
Zwłaszcza jeśli kopiujesz / wklejasz ten kod z pliku (lub dołączasz go do preprocesora), dobrze jest mieć po prostu znaki, które chcesz w pliku xml, bez pomylenia ich ze znacznikami / atrybutami XML. Jak wspomniano w @paary, inne popularne zastosowania obejmują umieszczanie adresów URL zawierających znaki ampersand. Wreszcie, nawet jeśli dane zawierają tylko kilka znaków specjalnych, ale dane są bardzo, bardzo długie (powiedzmy tekst rozdziału), miło jest nie musieć en / dekodować tych kilku jednostek podczas edycji pliku xml .
(Podejrzewam, że wszystkie porównania do komentarzy są trochę mylące / nieprzydatne).
źródło
Kiedyś musiałem użyć CDATA, gdy mój element xml musiał przechowywać kod HTML. Coś jak
Zatem CDATA oznacza, że zignoruje każdy znak, który w innym przypadku mógłby być interpretowany jako znacznik XML, taki jak <i> itp.
źródło
Dane w nich zawarte nie będą analizowane jako XML i jako takie nie muszą być poprawne XML lub mogą zawierać elementy, które mogą wyglądać na XML, ale nimi nie są.
źródło
Z Wikipedii:
Zatem: tekst wewnątrz CDATA jest postrzegany przez analizator składni, ale tylko jako znaki, a nie jako węzły XML.
źródło
Jako kolejny przykład jego użycia:
Jeśli masz kanał RSS (dokument xml) i chcesz dołączyć podstawowe kodowanie HTML do wyświetlania opisu, możesz użyć CData do jego zakodowania:
Czytnik RSS pobiera opis i renderuje HTML w CDATA.
Uwaga - nie wszystkie tagi HTML działają - myślę, że zależy to od używanego czytnika RSS.
I jako wyjaśnienie, dlaczego w tym przykładzie użyto CData (a nie odpowiednich tagów pubData i dc: creator): jest to do wyświetlania witryny za pomocą widgetu RSS, dla którego nie mamy prawdziwej kontroli formatowania.
To pozwala nam określić wysokość i pozycję dołączonego obrazu, poprawnie sformatować nazwiska autora i datę itd., Bez potrzeby posiadania nowego widżetu. Oznacza to również, że mogę to napisać i nie muszę dodawać ich ręcznie.
źródło
CDATA to skrót od Character Data. Możesz użyć tego do zmiany niektórych znaków, które w przeciwnym razie będą traktowane jako zwykłe XML. Dane w tym pliku nie zostaną przeanalizowane. Na przykład, jeśli chcesz przekazać adres URL, który zawiera
&
, możesz użyć do tego CDATA. W przeciwnym razie pojawi się błąd, ponieważ zostanie on przeanalizowany jako zwykły plik XML.źródło
Jest używany do przechowywania danych, które inaczej mogłyby być postrzegane jako xml, ponieważ zawiera pewne znaki.
W ten sposób dane wewnątrz będą wyświetlane, ale nie interpretowane.
źródło
Ucieka ciąg znaków, którego nie można przekazać do XML w zwykły sposób:
Przykład:
Ciąg zawiera w sobie „&”.
Nie możesz:
Dlatego musisz użyć CDATA:
źródło
Zwykle używany do osadzania niestandardowych danych, takich jak obrazy lub dane dźwiękowe w dokumencie XML.
źródło
Cdata to dane, które możesz chcieć przekazać do analizatora składni xml i nadal nie będą interpretowane jako xml.
Powiedz na przykład: - Masz plik XML zawierający obiekt pytania / odpowiedzi. Takie otwarte pola mogą zawierać dowolne dane, które nie należą ściśle do podstawowego typu danych lub niestandardowych typów danych zdefiniowanych w xml. Lubię to - czy jest to poprawny tag dla komentarza xml? .-- Może być wymagane przekazanie go takim, jakim jest, bez interpretacji przez analizator składni xml jako innego elementu potomnego. Tutaj Cdata przybywa na ratunek. Deklarując jako Cdata, mówisz parserowi, że nie traktuje danych opakowanych jako xml (choć może to wyglądać jak jeden)
źródło
Zauważ, że
CDATA
konstrukcja jest potrzebna tylko wtedy, gdy umieszczasz tekst bezpośrednio w pliku tekstowym XML.Oznacza to, że musisz używać tylko
CDATA
wtedy, gdy wpisujesz ręcznie lub programowo budujesz tekst XML bezpośrednio.Każdy tekst wprowadzony za pomocą interfejsu API procesora DOM lub SimpleXML zostanie automatycznie opatrzony znakami ucieczki, aby zapobiec nieprawidłowemu działaniu reguł treści XML.
źródło