Когда к CDATA по сравнению с Escape и наоборот?

Я использовал это, чтобы с некоторым успехом обсуждать события:

public static Action<T> Debounce<T>(this Action<T> func, int milliseconds = 300)
{
    var last = 0;
    return arg =>
    {
        var current = Interlocked.Increment(ref last);
        Task.Delay(milliseconds).ContinueWith(task =>
        {
            if (current == last) func(arg);
            task.Dispose();
        });
    };
}

Использование

Action<int> a = (arg) =>
{
    // This was successfully debounced...
    Console.WriteLine(arg);
};
var debouncedWrapper = a.Debounce<int>();

while (true)
{
    var rndVal = rnd.Next(400);
    Thread.Sleep(rndVal);
    debouncedWrapper(rndVal);
}

Это может быть не так, как в RX, но это легко понять и использовать.

13
задан Carlos S 8 June 2009 в 22:49
поделиться

2 ответа

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

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

Если вы собираетесь иметь элемент XML, значение которого равно XML, то в этом случае CDATA может быть лучшим выбором.

Для получения дополнительной информации см., Например, вопрос XML FAQ, Когда мне следует использовать отмеченный раздел CDATA?

18
ответ дан 1 December 2019 в 21:53
поделиться

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

Люди не ожидают, что

<![CDATA[<foo>bar</foo>]]>

будет идентичным

&lt;foo&gt;bar&lt;/foo&gt;

в том, что касается систем XML.

] См. «Суп тегов RSS», где приведены примеры ужаса экранирования уровней.

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

Так что, если не читаемость имеет первостепенное значение, или вы обертываете неэлементную разметку, я рекомендую избегать CDATA.

5
ответ дан 1 December 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: