的XmlSchemaSet负载模式,而不键约束
问题描述:
当我通过加载下面的代码的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);
一切工作正常。
当我通过
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加载XSD架构(上文)失败。我两次加载同一个文件。
如何获取XmlSchemaSet以加载密钥约束?两个模式都来自同一个文件(.SourceUri都是this.schemaSourceURI)。
确保在处理模式之前收到整个模式。你有一个异步事件,你必须阻止在处理之前等待整个文件。 – jdweng
谢谢你的回答!哪种方法是异步的?文档没有关于它。也不是我能如何等待它。 – simsi
我想你只需要扭转第二和第三行,以便添加模式,添加事件处理程序,然后编译。在读取模式之前添加事件处理程序可能会导致验证回调错误。 – jdweng