SAX по сравнению с XmlTextReader - SAX в C#

Ваша функция довольно бессмысленная, вы это знаете? Давай сделаем немного математики, ладно.

module Q54272249 where

u :: Integer -- this tells you that `u` takes nothing and returns an Integer
u = let a = 2
        b = a + (let a = 3
                 in a+b)
    in b*b

Просто подставляя внутреннюю a константой 3

u' :: Integer
u' = let a = 2
         b = a + (3+b)
     in b*b

Делая то же самое для внешней a

u'' :: Integer
u'' = let b = 2 + (3+b) in b*b

Добавление является ассоциативным [ 1118]

u''' :: Integer
u''' = let b = 5+b in b*b

Замена привязки let эквивалентной функцией

u'''' :: Integer
u'''' = (5 + u'''') ^ 2

Вы видите проблему сейчас? Это функция, которая не принимает аргументов и возвращает значение типа Integer, которое 5 добавляется в квадрат. Какова стоимость самого себя в какой-то момент времени? Вы рекурсивно оцениваете это и никогда не получаете ответа.

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

u''''' :: Integer -> Integer
u''''' 0 = 0
u''''' x = (5 + u''''' (x - 1)) ^ 2

x уменьшается на 1 с каждым вызовом, и когда он нажимает 0, он возвращает 0 или любое другое значение, которое вы хотели бы. Это называется рекурсией, и это всегда одно и то же: установить один или несколько базовых случаев и рекуррентное отношение.

Обратите внимание, что рекуррентные отношения являются аналогом в дискретной математике дифференциальным уравнениям в анализе.

12
задан cgreeno 10 November 2009 в 22:29
поделиться

4 ответа

Если Вы говорите о SAX для.NET, проект, кажется, не сохраняется. Последний выпуск был больше чем 2 года назад. Возможно, они получили его прекрасный на последнем выпуске, но я не буду держать пари на нем. Автор, Karl Waclawek, кажется, исчез от сети.

Что касается SAX под Java? Вы держите пари, это является большим. К сожалению, SAX никогда не разрабатывался как стандарт, таким образом, все порты не-Java адаптировали Java API к их собственным потребностям. В то время как DOM является довольно паршивый API, он имеет преимущество того, чтобы быть разработанным для нескольких языков и сред, таким образом, легко реализовать в Java, C#, JavaScript, C, и др.

7
ответ дан 2 December 2019 в 05:56
поделиться

Если Вы просто хотите сделать задание быстро, XmlTextReader существует с этой целью (в.NET).

Если Вы хотите изучить фактический стандарт (и доступный в мае другие языки программирования), который стабилен и который вынудит Вас кодировать очень эффективно и изящно, но который также чрезвычайно гибок, то изучите SAX. Однако не тратьте впустую свое время, если Вы не собираетесь быть создающими очень тайными синтаксическими анализаторами XML. Вместо этого ищите синтаксические анализаторы что синтаксические анализаторы следующего поколения (как XmlTextReader) для Вашей конкретной платформы.

Ресурсы SAX
SAX был первоначально записан для Java, и можно найти исходный проект с открытым исходным кодом, который был стабилен в течение нескольких лет, здесь: http://sax.sourceforge.net/

Существует порт C# того же проекта здесь (с документами HTML как часть исходной загрузки); это также стабильно: http://saxdotnet.sourceforge.net/

Если Вам не нравится реализация C#, Вы могли бы всегда обращаться к ссылке на COM DLL через COMInterop, использующий MSXML3 или позже: http://msdn.microsoft.com/en-us/library/ms994343.aspx

Статьи, которые прибывают из мира Java, но которые, вероятно, иллюстрируют понятия, необходимо быть успешными с этим подходом (может также быть загружаемый исходный код Java, который мог оказаться полезным и может быть достаточно легок преобразовать в C#):

Это будет громоздкая реализация. Я только использовал SAX назад в мои дни pre-.NET, но он требует некоторым довольно усовершенствованных методов кодирования. На данном этапе это просто не стоит проблемы.

Интересное понятие для гибридного синтаксического анализатора
Этот поток описывает гибридный синтаксический анализатор, который использует XmlTextReader.NET для реализации синтаксического анализатора, который обеспечивает комбинацию преимуществ SAX и DOM...
http://bytes.com/groups/net-xml/178403-xmltextreader-versus-dom

9
ответ дан 2 December 2019 в 05:56
поделиться

Я полагаю, что нет никаких преимуществ с помощью SAX, по крайней мере, должные две причины:

  1. SAX является моделью "нажатия", в то время как XmlReader является синтаксическим анализатором получения по запросу, который обладает многими преимуществами.
  2. Будучи зависящим от сторонней библиотеки вместо того, чтобы использовать стандартную.NET API.
5
ответ дан 2 December 2019 в 05:56
поделиться

Рассмотрим следующий упрощенный пример:

public class Example {
    public static void main(String[] args) {
        int[] factors = {1, 2, 3};
        ArrayList<Integer> f = new ArrayList(Arrays.asList(factors));
        System.out.println(f);
    }
}

В строке println выводится что-то вроде "[[Я @ 190d11Excel не удаляет начальные пробелы. Вы получите нежелательные пробелы в заголовках и полях данных. Хуже того, ", который должен« защищать »этот разрыв строки в третьем столбце, будет проигнорирован, потому что он находится не в начале поля.

Если у вас есть символы, отличные от ASCII (закодированные в UTF-8) в файле у вас должна быть спецификация UTF-8 (3 байта, шестнадцатеричный EF BB BF ) в начале файла. В противном случае Excel будет интерпретировать данные в соответствии с вашей локалью по умолчанию. кодировка (например, cp1252) вместо utf-8, и ваши символы, отличные от ASCII, будут удалены.

Следующие комментарии относятся к Excel 2003, 2007 и 2013; не тестировалось в Excel 2000

Если вы открываете файл двойным -щелкнув его имя в проводнике Windows, все работает нормально.

Если открыть его из Excel, результаты будут разными: обязательно будет по 50% каждая. В значение может меняться в зависимости от их содержание. Мне также нужны все предметы в эти ячейки независимо от количества строк должны выстроиться так же, как они будет в таблице. "

Вышеупомянутое невозможно в кроссбраузерном режиме без использования таблицы (вы можете смоделировать макет таблицы с помощью CSS:" display: table ", но это не работает в IE6 или IE7) .

Я бы посоветовал вам думать немного иначе при разработке с использованием CSS вместо таблиц, невозможно просто заменить «tr» и «td» на «div» и заставить все волшебным образом работать, как раньше. Я предлагаю вам установите ширину нижних «ячеек» и используйте один из вариантов, которые вам дали выше.

Надеюсь, что это поможет!

Так, например, если у вас есть

<mx:Canvas><mx:Label id="myLabel" /></mx:Canvas>

, вы можете получить к нему доступ по его id в качестве имени переменной:

myLabel.text = "Hello world!";

Дайте мне знать, если вам нужны дополнительные разъяснения. Если вы спрашиваете не об этом, не стесняйтесь комментировать, и я сделаю еще один удар.

С уважением, Вам нужно будет вернуть несколько частей информации для вашего ответа. К счастью, вы можете легко сделать это с помощью JSON, и jQuery автоматически обработает это за вас, если вы укажете тип ответа json. Объект, который вы добавляете в свою функцию обратного вызова ajax, будет содержать все необходимые вам фрагменты данных в виде различных свойств.

Я бы посоветовал выработать привычку возвращать код состояния «успех» или «сбой» при каждом вызове ajax. , и набор ошибок с ним. См. Эту замечательную запись в блоге для получения дополнительной информации о том, что я имею в виду.

Причина этого в том, что вызов ajax всегда в основном "успешен", если только сервер действительно не может обработать запрос и не вернет код состояния HTTP сбоя. Если результат запроса похож на ошибку проверки, Большая часть кода будет структурирована вокруг модели while (rdr.Read ()), но если у вас есть какие-либо «ReadString» или «ReadInnerXml ()» в этом цикле, вы обнаружите, что пропускаете элементы на следующей итерации.

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

Лично я считаю, что Microsoft изобрела представление о том, что XmlReader лучше с объяснением толкания / вытягивания модель, но я ее особо не покупаю. Итак, Microsoft думает, что вам не нужно создавать конечный автомат с XmlReader, что для меня не имеет смысла, но в любом случае это только мое мнение.

внутри этого цикла вы обнаружите, что пропускаете элементы на следующей итерации.

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

Мое личное мнение таково. что Microsoft изобрела представление о том, что XmlReader лучше с объяснением модели push / pull, но я на самом деле не покупаю это. Итак, Microsoft думает, что вам не нужно создавать конечный автомат с XmlReader, что для меня не имеет смысла, но в любом случае это только мое мнение.

внутри этого цикла вы обнаружите, что пропускаете элементы на следующей итерации.

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

Мое личное мнение таково. что Microsoft изобрела представление о том, что XmlReader лучше с объяснением модели push / pull, но я на самом деле не покупаю это. Итак, Microsoft думает, что вам не нужно создавать конечный автомат с XmlReader, что для меня не имеет смысла, но в любом случае это только мое мнение.

но я действительно не покупаю это. Итак, Microsoft думает, что вам не нужно создавать конечный автомат с XmlReader, что для меня не имеет смысла, но в любом случае это только мое мнение.

но я действительно не покупаю это. Итак, Microsoft думает, что вам не нужно создавать конечный автомат с XmlReader, что для меня не имеет смысла, но в любом случае это только мое мнение.

5
ответ дан 2 December 2019 в 05:56
поделиться