Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2011, 13:19   #1
NieL
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 116
По умолчанию Стоит ли использовать XPath

Приложение импортирует xml-файл. задача: проверить для определенных нодов наличие обязательных атрибутов и отсутствие запрещенных. как грамотнее это сделать:

1. в цикле проверять атрибуты

Код:
for I := 0 to childNodes.length - 1 do
      with childNodes[I], attributes do
      begin
        //
        attr_file_name := getNamedItem(C_XML_ATTR_FILE_NAME_NAME);
        if (attr_file_name = nil) then
          raise Exception.CreateResFmt(@EAttrNotFound,
            [C_XML_ATTR_FILE_NAME_NAME])
        //
        attr_from_ver := getNamedItem(C_XML_ATTR_FROM_VER_NAME);
        if (attr_from_ver <> nil) then
          raise Exception.CreateResFmt(@EInvalidAttr,
            [C_XML_ATTR_FROM_VER_NAME])
        //
        attr_to_ver := getNamedItem(C_XML_ATTR_FROM_VER_NAME);
        if (attr_to_ver = nil) then
          raise Exception.CreateResFmt(@EAttrNotFound,
            [C_XML_ATTR_TO_VER_NAME])
Плюсы: могу идентифицировать точное место ошибки (имя ветки и имя ошибочного атрибута)
Минусы: код получается лишком громоздким

2. использовать XPath

Код:
selectNodes(//file[@file_name and @to_ver and not (@from_ver)]);
Плюсы: все проверки выполняется в рамках селект-запроса
Минусы: не могу кокретизировать сообщение об ошибка (имя аттрибута и что не так: недопустимый атрибут или атрибут отсутствует)

НУЖЕН ГРАМОТНЫЙ СОВЕТ!
NieL вне форума Ответить с цитированием
Старый 05.04.2011, 13:59   #2
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Проверку на C_XML_ATTR_FILE_NAME_NAME и C_XML_ATTR_TO_VER_NAME похоже можно записать компактнее, если использовать еще один цикл.
eduard93 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стоит ли использовать inline для оптимизации в MSVC? Kn793 Общие вопросы C/C++ 2 10.12.2010 16:07
Какой скрипт стоит использовать/искать? qdf1 PHP 3 28.06.2010 03:48
xpath html парсер volok-aleksej Qt и кроссплатформенное программирование С/С++ 0 19.05.2009 16:17
стоит ХР, поэтому функцию БЗ не могу использовать, а нужно рассчитать. что делать, помогите Baxxter Microsoft Office Excel 2 18.04.2009 02:15
Ну вот и я в студентах )) - Подскажите по Xpath Stilet Общие вопросы по программированию, компьютерный форум 7 30.10.2007 15:42