Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизВалидация XML Найти похожие ветки
← →
Unknown_user (2011-02-23 16:50) [0]Подскажите как в Delphi XE можно выполнить валидацию XML файла согласно XSD схеме. Схема хранится локально и ссылка на нее в XML файле отсутствует. Желательно использование объекта MS XML.
← →
KilkennyCat © (2011-02-23 21:03) [1]http://www.sql.ru/forum/actualthread.aspx?tid=596328
← →
KilkennyCat © (2011-02-23 21:08) [2]забыл сказать - это первая строчка в гугле.
xsd уже лет десять.
задачу валидности трудно назвать нетипичной.
делфи тоже не вчера появилась.
исходя из этого, странно задавать такой вопрос.
← →
Unknown_user (2011-02-23 21:24) [3]По приведенной ссылке приведен пример проверки XML без XSD схемы. В вопросе звучал именно способ валидации при помощи явного указания XSD файла. Кроме того, забыл упомянуть, что требуется выдача всего списка найденных ошибок а не останов на первой ошибке.
То есть нужна функция вроде
function ValidateXML(XMLFileName, XSDFileName: string; ErrStrs: TStrings): Boolean;
где
XMLFileName - путь к XML файлу для проверки,
XSDFileName - путь к файлу схемы,
ErrStrs - список всех найденных ошибок
функция возвращает True, если XML well-formed и валидный.
← →
Unknown_user (2011-02-23 21:30) [4]Не сомневайтесь, я умею пользоваться поиском. В инете действительно много инфы по данному вопросу. Но существует множество версий MS XML, поэтому в описании интерфейсов в делфи можно заблудиться. И не так просто найти работающий пример.
Собственно говоря, я уже разобрался. Однако, все еще интересно ваше решение.
← →
Игорь Шевченко © (2011-02-23 21:43) [5]function DOMCheckByXSDWithNamespace(XML: IXMLDOMDocument2; const XsdDoc: string;
var ErrMsg: string; const aNamespace: string = ""): boolean;
var
SchCache: IXMLDOMSchemaCollection;
aXML: IXMLDOMDocument2;
Path: OleVariant;
xmlErr: string;
XsdBuffer: array[0..MAX_PATH] of Char;
XsdFilePart: PChar;
begin
Path := XsdDoc;
SchCache := nil;
if MSXML6Installed then
SchCache := CoXMLSchemaCache60.Create
else if MSXML4Installed then
SchCache := CoXMLSchemaCache40.Create
else if MSXML3Installed then
SchCache := CoXMLSchemaCache30.Create;
SchCache.add(aNamespace, Path);
aXML := CreateXMLDOM;
aXML.Schemas := SchCache;
aXML.Async := False;
aXML.ValidateOnParse := True;
aXML.SetProperty("NewParser", True);
aXML.loadXML(XML.xml);
Result := aXML.parseError.errorCode = 0;
if not Result then
begin
with aXML.ParseError do
begin
ErrMsg := Format(EM_PARSE_ERROR, [ErrorCode, Line, LinePos, Reason]);
end;
end;
end;
ну вот как-то так...
← →
Unknown_user (2011-02-23 21:57) [6]> Игорь Шевченко
Да, этот код работает, но не выполняется требование выдавать весь список найденных ошибок.
← →
KilkennyCat © (2011-02-23 23:06) [7]
> Но существует множество версий MS XML, поэтому в описании
> интерфейсов в делфи можно заблудиться. И не так просто найти
> работающий пример.
сказки будешь детям рассказывать.
второй шаг по выше приведенной ссылке приводит к работающему примеру.
← →
Unknown_user (2011-02-24 00:49) [8]>второй шаг по выше приведенной ссылке приводит к работающему примеру.
Ткните носом, пожалуйста. Если имеется ввиду этот код, то он не удовлетворяет поставленной задаче.
xmlDoc := CoDOMDocument.Create;
xmlDoc.async := False;
xmlDoc.load("c:\TextXml.xml");
xmlErr := xmlDoc.validate;
if xmlErr.errorCode <> 0 then
ShowMessage(xmlErr.reason + #13#10 + xmlErr.srcText );
Игорь Шевченко привел пример валидации XML по произвольному XSD файлу (именно валидации согласно XSD, я упоминал уже не раз что мне нужно). Спасибо ему за это.
Но и этот код не удовлетворяет второму условию. Валидация останавливается на первой ошибке. Мне нужен список всех ошибок в XML.
Повторюсь, после публикации своего вопроса я таки разобрался по MSDN как это сделать. И это оказалось не так и сложно в итоге. Просто нигде не нашел готового решения. А KilkennyCat утверждает, что оно находится в первых ссылках, выдаваемых гуглом. Вот и стало интересно где же именно.
← →
KilkennyCat © (2011-02-24 01:04) [9]
> А KilkennyCat утверждает, что оно находится в первых ссылках,
> выдаваемых гуглом. Вот и стало интересно где же именно.
>
ссылку давал.
второй пост в этой ссылке:Примеры в SDK есть. Еще можете поискать файлик xsdms.js - реализация валидации на JScript
ради любопытства глянул явовскую реализацию. работает.
гугл, "MSDN XSD validation" - немеряно информации.
разъяснил?
← →
Unknown_user (2011-02-24 11:36) [10]Ну если немеряно информации, найдите как выполнить валидацию с выдачей всего списка ошибок а не первой встреченной. Не в C#, там используются феймворк классы, в Delphi XE. Вы же конкретно так и не ответили ни разу. Что то не так с гуглом? Странно давать такие ответы.
Информации в самом деле немеряно, но вырыть нужное не так просто. Поэтому и спрашивал у людей знающих.
← →
KilkennyCat © (2011-02-24 12:23) [11]
> Вы же конкретно так и не ответили ни разу
я тебе что-то должен?
← →
Unknown_user (2011-02-24 12:27) [12]Нет, конечно. Но и упрекать в некомпетентности тоже не нужно.
← →
clickmaker © (2011-02-24 12:59) [13]http://philo.de/xml/downloads.shtml
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.067 c