XmlSchemaSet 在没有键约束的情况下加载模式
XmlSchemaSet loads schema without key constraints
当我通过以下代码加载 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)。
我不知道为什么,但是 schemaSet.Add(null, file) 用 null 而不是 "http://www.w3.org/2001/XMLSchema" 为我修复了它。
当我通过以下代码加载 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)。
我不知道为什么,但是 schemaSet.Add(null, file) 用 null 而不是 "http://www.w3.org/2001/XMLSchema" 为我修复了它。