Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.254.94] |
|
Сообщ.
#1
,
|
|
|
Приветствую.
Стоит задача: есть xml-файл. Надо по нему составить xml schema для валидации данных определенного пространства имён в xml-файле. Я взял стандартную утилиту от MS xsd.exe, и она мне сгенерировала 3 xsd файла (весь комплект в аттаче. Расширение odx можно поменять на xml). То пространство имен, которое мне нужно проверять, находится в файле Стрелка_SSP_app2.xsd. Там я его немного подкорректировал, чтобы проверить работу валидатора (добавил ограничения на атрибут): <xs:attribute name="ТипОстряков"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="сплошные"/> <xs:enumeration value="гибкие"/> </xs:restriction> </xs:simpleType> </xs:attribute> Затем в C# я пытаюсь сделать валидацию этого добра: string filePath = @"D:\Work\XSchemaValidator\XSchemaValidator\TestVal\bin\Debug\Стрелка_SSP.odx"; var doc = IMSAT.OFTD.DOM.Document.Load(filePath); XmlReader reader = XmlReader.Create(filePath); XmlSchemaSet schemaSet = new XmlSchemaSet(); string editorNameSpace = "http://www.imsat.spb.ru/OFTD/editor/v1.0"; schemaSet.Add(editorNameSpace, "Стрелка_SSP.xsd"); string ashapesNameSpace = "http://www.imsat.spb.ru/OFTD/libs/ashapes.AutoShapesLibrary/v1.0"; schemaSet.Add(ashapesNameSpace, "Стрелка_SSP_app1.xsd"); string sspNameSpace = "http://www.imsat.spb.ru/OFTD/SchematicStationPlan/v1.0"; schemaSet.Add(sspNameSpace, "Стрелка_SSP_app2.xsd"); XmlNamespaceManager manager = new XmlNamespaceManager(reader.NameTable); XmlSchemaValidator validator = new XmlSchemaValidator(reader.NameTable, schemaSet, manager, XmlSchemaValidationFlags.None); validator.ValidationEventHandler += new ValidationEventHandler(SchemaValidationEventHandler); validator.Initialize(); foreach (var page in doc.Pages) { foreach (var element in page.Elements) { foreach (var attr in element.Attributes) { if (element.NamespaceUri != sspNameSpace) continue; validator.ValidateElement(element.XmlName, sspNameSpace, null); validator.ValidateAttribute(attr.Name, sspNameSpace, attr.Value, null); validator.GetUnspecifiedDefaultAttributes(new ArrayList()); validator.ValidateEndOfAttributes(null); } } } reader.Close(); Console.ReadLine(); Затем в исходном файле odx я меняю значения для моего подопытного атрибута ТипОстряков, но ничего не происходит. Никакого сообщения об ошибке нет. Подскажите, пожалуйста, может что-то не так в этих xsd-файлах, которые нагенерировала утилита? Спасибо. |
Сообщ.
#2
,
|
|
|
Возьми XML Spy и погляди что там тебе валидирует, в нем даже дебаггер есть. А разбираться за тебя в нагенеренной через одно место схеме - ну иво нафиг...
|