AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.10.2013, 11:16   #1  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Cardagant Посмотреть сообщение
Спасибо за пример!

Ругается на метод Validate() с ошибкой:
"Класс System.Xml.XmlDocument не содержит эту функцию."
Хоть в выпадающем списке методов он есть. Как такое может быть?
Вот код, который работает в четверке. Проверяет валидность xml файла схеме (xsd файла):
X++:
    XMLTextReader                   xmlReader; // системный класс ядра
    XMLSchema                         xmlSchema; // системный класс ядра
    XmlSchemaValidationError    validationError; // системный класс ядра
    boolean                               ret = true;
    ;
    if (!WinApi::fileExists(shemaName))
    {
        ret = checkfailed(strfmt("Не найден файл \"%1\"", shemaName));
        return ret;
    }

    new FileIOPermission(shemaName, 'r').assert();
    xmlSchema = XMLSchema::newFile(shemaName);
    xmlSchema.compile();
    CodeAccessPermission::revertAssert();

    if (! xmlSchema.isCompiled())
    {
        ret = checkfailed(xmlSchema.validationError().message());
        return ret;
    }

    new FileIOPermission(fileName, 'r').assert();
    xmlReader = XMLTextReader::newFile(fileName);
    xmlReader.read();
    CodeAccessPermission::revertAssert();

    validationError = xmlReader.validate(xmlSchema.writeToString());

    if (validationError)
    {
        ret = checkfailed(validationError.message());
    }

    return ret;
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: plumbum (1), Cardagant (1), A_BAS (1).
Старый 18.10.2013, 12:17   #2  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
2lev

Спасибо! Знаю такой способ.
Но мне нужно производить валидацию сразу по нескольким схемам. Стандартные классы этого не позволяют.

Если взглянете на код в сообщениях выше, то сможете увидеть
X++:
xs.Add('xmln', 'schemaPath1.xsd');
xs.Add('xmln', 'schemaPath2.xsd');
А у меня таких схем больше двух

Последний раз редактировалось Cardagant; 18.10.2013 в 12:19.
Старый 18.10.2013, 13:28   #3  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Cardagant Посмотреть сообщение
2lev

Спасибо! Знаю такой способ.
Но мне нужно производить валидацию сразу по нескольким схемам. Стандартные классы этого не позволяют.

Если взглянете на код в сообщениях выше, то сможете увидеть
X++:
xs.Add('xmln', 'schemaPath1.xsd');
xs.Add('xmln', 'schemaPath2.xsd');
А у меня таких схем больше двух
Я правильно понял, что один xml файл должен провериться на соответствие нескольким схемам?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 18.10.2013, 13:38   #4  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от lev Посмотреть сообщение
Я правильно понял, что один xml файл должен провериться на соответствие нескольким схемам?
Да, Вы поняли верно. Причём схемы имеют зависимости между собой.

Если цитировать одно из предыдущих сообщений темы:
Цитата:
не работает в случае, если в XSD-схеме используется импорт из другой схемы, содержащей другое пространство имен
Старый 19.10.2013, 02:14   #5  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Предложу свой вариант, работает на DAX 2009, но не пробовал с несколькими схемами, думаю должно работать, если нет, выложите плиз свои тестовые данные.

X++:
    System.Xml.XmlReaderSettings    xmlReaderSettings;
    System.Xml.Schema.XmlSchemaSet  xmlSchemaSet;
    System.Xml.XmlReader            xmlReader;
    ;
    
    try
    {
        xmlSchemaSet = new System.Xml.Schema.XmlSchemaSet();
        xmlSchemaSet.Add('', @'schemaPath1.xsd');
        xmlSchemaSet.Add('', @'schemaPath2.xsd');
        xmlReaderSettings = new System.Xml.XmlReaderSettings();
        xmlReaderSettings.set_ValidationType(System.Xml.ValidationType::Schema);
        xmlReaderSettings.set_Schemas(xmlSchemaSet);
        xmlReader = System.Xml.XmlReader::Create(@'fileName.xml', xmlReaderSettings);
        while(xmlReader.Read())
        {
            //
        }
        info("Ok");
    }
    catch( Exception::CLRError)
    {
        error(strFmt("Validation error: %1", AifUtil::getClrErrorMessage()));
    }
    if(!CLRInterop::isNull(xmlReader))
    {
        xmlReader.Close();
    }

Последний раз редактировалось handy-comp; 19.10.2013 в 02:19.
За это сообщение автора поблагодарили: trud (2), plumbum (1), Cardagant (1), A_BAS (1).
Старый 19.10.2013, 12:40   #6  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
2handy-comp

Спасибо за Ваш вариант!
А что должно быть в цикле While?
Старый 19.10.2013, 13:48   #7  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Цитата:
Сообщение от Cardagant Посмотреть сообщение
2handy-comp

Спасибо за Ваш вариант!
А что должно быть в цикле While?
Ничего, все как указано, только свои файлы пропишите.
Теги
ax2009, ax3.0, ax4.0, xml, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axapta & XML dj_Mage DAX: Программирование 4 11.08.2006 12:42
Проблема с выгрузкой/загрузкой файлов в базу из Axapta в др базу Jony DAX: Программирование 1 29.09.2004 15:20
Axapta 3, отправка файлов по eMail (КАК ИСПРАВИТЬ) raz DAX: Программирование 1 01.10.2003 15:07
XML в Axapta axot DAX: Программирование 4 01.11.2002 11:37
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:33.