Мне нужно записать журнал ошибок в XML-файл с помощью Visual Basic 6.0. Есть простой способ сделать это?
Журнал ошибок будет содержать номер ошибки, источник, описание и временную метку.
Спасибо, Джефф
Джефф отмечает, что создатель вопроса, ответа или комментария добавляется SO на отображение, нет необходимости подписывать их самостоятельно.





Вероятно, для этого лучше всего использовать библиотеки Microsoft MSXML.
В базе знаний есть образец: http://support.microsoft.com/kb/286817
Если вы пишете только файл журнала, я бы рекомендовал просто объединить такую строку:
Public Function GetXmlEntry(errNumber as Long, description as String) as String GetXmlEntry = "<entry><error-number>" & errNumber & "</error-number><description>" & description & "</description></entry>" End Function
Здесь нет необходимости в использовании библиотек XML, и это даже приведет к ненужному снижению производительности (т.е. без преимущества).
(редактировать) Как было указано в комментариях, написание правильного XML требует как минимум двух дополнительных шагов даже для одной единственной записи: во-первых, нужно правильно экранировать некоторые специальные символы (это не должно быть так сложно); во-вторых, необходимо использовать правильную (= одинаковую) кодировку для всего XML-файла в соответствии с объявлением в заголовке (для этого моего VB-Fu недостаточно - поможет небольшое копание в ссылке).
Очень хороший совет - избежать накладных расходов на создание анализатора XML только для создания простого XML-документа!
@gimpf: настройка функции для правильной кодировки описания
«Вау, спасибо за быстрый ответ». Искренние извинения перед Binary Worrier и всем сообществом.
правильно сформированный xml также имеет корневой узел, поэтому закрывающий тег для корневого узла должен быть перезаписан, а затем добавлен каждый раз, когда вы добавляете запись.
Я бы не рекомендовал такой способ. Сначала это может показаться проще, но XML-документ легко сломать, например, когда "описание" содержит недопустимый символ, такой как '<'
(Продолжение :) И, как говорит Джоэл, сложнее поддерживать правильную форму. Вот почему файлы журналов XML, как правило, плохая идея (добавление дорого)
Да, идея использовать XML для ведения журнала спорна. Я бы никогда не написал закрывающий тег для самого XML-файла - тем не менее, в случае сбоя программы это не может быть гарантировано, поэтому читатель должен позаботиться об этом.
Действительный XML также должен быть Unicode, что будет сложно. Я также согласен с тем, что вы не должны использовать XML для ведения журнала.
К сожалению, требуется XML. Однако файл журнала XML является временным хранилищем, обеспечивающим попадание информации в базу данных. Каждая ошибка будет иметь свой собственный XML-файл и будет удалена после регистрации ошибки в БД.
Библиотеки Microsoft MSXML - это ваш первый порт обращения, но есть вещи, которые вам нужно учесть, прежде чем вы решите их использовать.
Добавление сообщений об ошибках в XML с помощью библиотеки MSML будет анализировать и загружать файл Xml каждый раз, когда вы его открываете. По мере роста файла Xml вы обнаружите, что ваше приложение замедляется до сканирования.
Было бы хорошо, если бы вы могли «просто» добавить свою ошибку в конец файла, однако из-за закрывающих тегов это непросто, но это можно сделать.
Если у вас есть контроль над созданием файла Xml, вы можете обойти эту проблему производительности, разделив файл Xml на два: один с заголовком, а другой - с телом XML. Затем вы можете добавить его в конец основного файла (используя класс записи Xml или просто добавив текст в файл).
См. Эффективные методы изменения больших файлов XML для получения дополнительной информации.
Однако все это излишне, если вы записываете одну ошибку в XML-файл, а следующая ошибка переходит в другой XML-файл. В этом случае используйте MSXML
Надеюсь это поможет.
Спасибо за решения. Думаю, я просто сделаю простую строку для хранения в файле. Просто потому, что мне не нужно беспокоиться о большом журнале ошибок. Каждая ошибка будет записана в отдельный XML-файл, который позже будет сохранен в БД и удален. Спасибо за помощь. -Джефф (первый пользователь)