|
|
|
|
#1 |
|
Участник
|
Цитата:
Однако Load'ы не проверяют файл по схемам. Буду искать дальше. Спасибо!
X++: System.Xml.XmlDocument xd;
System.Xml.Schema.XmlSchemaSet xs;
CLRObject validationEventHandler; //not initialized, always null
InteropPermission interopPerm;
#define.xml('filename')
;
try
{
xd = new System.Xml.XmlDocument();
xs = new System.Xml.Schema.XmlSchemaSet();
xs.Add('xmln', 'schemaPath1.xsd');
xs.Add('xmln', 'schemaPath2.xsd');
xd.set_Schemas(xs);
xd.Load(#xml);
xd.Validate(validationEventHandler);
}
catch (Exception::CLRError)
{
this.processCLRException();
}Цитата:
XmlSchemaValidationException: A schema validation event occurred and no ValidationEventHandler object was specified.
Я к сожалению не могу сейчас проверить это. Напишите, если Вам удасться.
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
|
|
|
#2 |
|
Участник
|
Спасибо за пример!
Ругается на метод Validate() с ошибкой: "Класс System.Xml.XmlDocument не содержит эту функцию." Хоть в выпадающем списке методов он есть. Как такое может быть? |
|
|
|
|
#3 |
|
Ищущий знания...
|
Цитата:
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). | |
|
|
#4 |
|
Участник
|
2lev
Спасибо! Знаю такой способ. Но мне нужно производить валидацию сразу по нескольким схемам. Стандартные классы этого не позволяют. Если взглянете на код в сообщениях выше, то сможете увидеть X++: xs.Add('xmln', 'schemaPath1.xsd'); xs.Add('xmln', 'schemaPath2.xsd');
Последний раз редактировалось Cardagant; 18.10.2013 в 12:19. |
|
|
|
|
#5 |
|
Ищущий знания...
|
Цитата:
Сообщение от Cardagant
2lev
Спасибо! Знаю такой способ. Но мне нужно производить валидацию сразу по нескольким схемам. Стандартные классы этого не позволяют. Если взглянете на код в сообщениях выше, то сможете увидеть X++: xs.Add('xmln', 'schemaPath1.xsd'); xs.Add('xmln', 'schemaPath2.xsd'); ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#6 |
|
Участник
|
Цитата:
Если цитировать одно из предыдущих сообщений темы: Цитата:
не работает в случае, если в XSD-схеме используется импорт из другой схемы, содержащей другое пространство имен
|
|
|
|
|
#7 |
|
Участник
|
Предложу свой вариант, работает на 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). | |
| Теги |
| ax2009, ax3.0, ax4.0, xml, полезное |
|
|
Похожие темы
|
||||
| Тема | Ответов | |||
| Axapta & XML | 4 | |||
| Проблема с выгрузкой/загрузкой файлов в базу из Axapta в др базу | 1 | |||
| Axapta 3, отправка файлов по eMail (КАК ИСПРАВИТЬ) | 1 | |||
| XML в Axapta | 4 | |||
| Введение в Аксапту | 0 | |||
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|