Почему вы должны использовать блоки XML CDATA?

При создании XML мне интересно, почему блоки CDATA используются, а не просто экранируют данные. В блоке CDATA разрешено что-то, что не может быть экранировано и помещено в обычный тег?

<node><![CDATA[ ...something... ]]></node>

вместо

<node>...something...</node>

Естественно, вам нужно будет экранировать данные в любом случае:

function xmlspecialchars($text)
{
    return str_replace('&#039;', '&apos;', htmlspecialchars($text, ENT_QUOTES, 'utf-8'));
}

Из спецификации кажется, что CDATA была просто возможным решением, когда у вас нет возможности скрыть данные - но вы все еще доверяете этому. Например, RSS-канал из вашего блога (который по тем или иным причинам не может избежать сущностей).

2 ответа

Решение

CDATA - это просто стандартный способ сохранить исходный текст, как есть, это означает, что, независимо от того, обрабатывает ли приложение XML, не должно предприниматься никаких явных действий для удаления.

Обычно это происходит с помощью JavaScript, встроенного в XHTML, когда вы используете зарезервированные символы:

<script type="text/javascript">
//<![CDATA[
    var test = "<This is a string with reserved characters>";

    if (1 > 0) {
        alert(test);
    }
//]]>
</script>

Если у тебя есть if (1 &gt; 0) вместо этого он должен был бы явно скрыться (чего не происходит). Это также намного более читабельно, как это.

Это первая и наиболее важная функция читабельности. XML и SGML до того, как он изначально должен был быть понятен человеку - верите или нет:-))

Во-вторых, для хорошего парсера это отличная возможность. Окончание]]> гарантированно будет фактическим окончанием блока, но кроме этого это блоб.

Парсер книг также должен хранить информацию / атрибут на представлении узла, чтобы отслеживать наличие в нем явного CDATA и никогда не трогать ни одного символа в нем.

Другие вопросы по тегам