2016-12-23 9 views
2

Когда я загружаю XMLSCHEMA через следующий код:XmlSchemaSet нагрузки схемы без ключевых ограничений

_XmlDocument = new XmlDocument(); 
XmlReaderSettings settings = new XmlReaderSettings(); 
settings.ValidationType = ValidationType.Schema; 
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema; 
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation; 
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings; 

XmlReader reader = XmlReader.Create(documentPath, settings); 

_XmlDocument.Load(reader); 
reader.Close(); 
XmlSchema schema = _XMLDocument.Schemas.Schemas().OfType<XmlSchema>().FirstOrDefault(); 

и сделать следующий блок кода тест:

Assert.IsNotNull(schema); 
Assert.AreEqual(this.schemaSourceURI, schema.SourceUri); 

XmlSchemaElement queryElement = schema.Elements.Values.OfType<XmlSchemaElement>().Where(e => e.Name.Equals("QUERY")).FirstOrDefault(); 
Assert.IsNotNull(queryElement); 
Assert.IsTrue(queryElement.Constraints.OfType<XmlSchemaKey>().Count() > 0); 
Assert.IsTrue(queryElement.Constraints.OfType<XmlSchemaKeyref>().Count() > 0); 

все работает отлично.

Когда я загрузить схему XSD с помощью

XmlSchemaSet schemaSet = new XmlSchemaSet(); 
schemaSet.ValidationEventHandler += new ValidationEventHandler(ValidationCallback); 
schemaSet.Add("http://www.w3.org/2001/XMLSchema", file); 
schemaSet.Compile(); 

return schemaSet.Schemas().OfType<XmlSchema>().FirstOrDefault(); 

XmlSchema schema = schemaSet.Schemas().OfType<XmlSchema>().FirstOrDefault(); 

тогда как Assert.IsTrue от модульного тестирования кода (выше) терпят неудачу. Я загружаю тот же файл оба раза.

Как получить XmlSchemaSet для загрузки ограничений ключа? Обе схемы из одного файла (.SourceUri - this.schemaSourceURI).

+0

Перед обработкой схемы убедитесь, что вы получили всю схему. У вас асинхронное событие, и перед обработкой вы должны заблокировать ожидание всего файла. – jdweng

+0

Спасибо за ваш ответ! Какой метод является асинхронным? В документации нет ничего об этом. Также не так, как я могу дождаться этого. – simsi

+0

Думаю, вам просто нужно отменить вторую и третью строки, чтобы добавить схему, добавить обработчик событий и затем скомпилировать. Добавление обработчика событий перед чтением схемы, вероятно, дает ошибку обратного вызова проверки. – jdweng

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^