На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL
  
> Валидация XML Schema
    Приветствую.

    Стоит задача: есть xml-файл. Надо по нему составить xml schema для валидации данных определенного пространства имён в xml-файле. Я взял стандартную утилиту от MS xsd.exe, и она мне сгенерировала 3 xsd файла (весь комплект в аттаче. Расширение odx можно поменять на xml).
    То пространство имен, которое мне нужно проверять, находится в файле Стрелка_SSP_app2.xsd. Там я его немного подкорректировал, чтобы проверить работу валидатора (добавил ограничения на атрибут):
    ExpandedWrap disabled
            <xs:attribute name="ТипОстряков">
              <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="сплошные"/>
                    <xs:enumeration value="гибкие"/>
                  </xs:restriction>
              </xs:simpleType>
            </xs:attribute>

    Затем в C# я пытаюсь сделать валидацию этого добра:
    ExpandedWrap disabled
                  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-файлах, которые нагенерировала утилита?

    Спасибо.
    Сообщение отредактировано: SunDevil -
      Возьми XML Spy и погляди что там тебе валидирует, в нем даже дебаггер есть. А разбираться за тебя в нагенеренной через одно место схеме - ну иво нафиг...
      Сообщение отредактировано: Астарот -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0275 ]   [ 15 queries used ]   [ Generated: 27.04.24, 17:30 GMT ]