XmlSchemaSet загружает схему без ключевых ограничений

Когда я загружаю XMLSchema через следующий код:

_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).

1 ответ

Решение

Я не знаю почему, но schemaSet.Add(null, file) с нулем вместо " http://www.w3.org/2001/XMLSchema" исправил это для меня.

Другие вопросы по тегам