Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlSchemaSet加载没有键约束的模式_C#_.net_Xml_Xsd_Xmlschemaset - Fatal编程技术网

C# XmlSchemaSet加载没有键约束的模式

C# XmlSchemaSet加载没有键约束的模式,c#,.net,xml,xsd,xmlschemaset,C#,.net,Xml,Xsd,Xmlschemaset,通过以下代码加载XMLSchema时: _XmlDocument = new XmlDocument(); XmlReaderSettings settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema; settings.Validation

通过以下代码加载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();
\u XmlDocument=new XmlDocument();
XmlReaderSettings设置=新建XmlReaderSettings();
settings.ValidationType=ValidationType.Schema;
settings.ValidationFlags |=XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |=XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationFlags |=XmlSchemaValidationFlags.ReportValidationWarnings;
XmlReader=XmlReader.Create(文档路径、设置);
_加载(读卡器);
reader.Close();
XmlSchema schema=_XMLDocument.Schemas.Schemas().OfType().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);
Assert.IsNotNull(模式);
AreEqual(this.schemaSourceURI、schema.SourceUri);
XmlSchemaElement queryElement=schema.Elements.Values.OfType()。其中(e=>e.Name.Equals(“查询”).FirstOrDefault();
Assert.IsNotNull(queryElement);
Assert.IsTrue(queryElement.Constraints.OfType().Count()>0);
Assert.IsTrue(queryElement.Constraints.OfType().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();
XmlSchemaSet schemaSet=new XmlSchemaSet();
schemaSet.ValidationEventHandler+=新的ValidationEventHandler(ValidationCallback);
schemaSet.Add(“http://www.w3.org/2001/XMLSchema“,文件);
schemaSet.Compile();
返回schemaSet.Schemas().OfType().FirstOrDefault();
XmlSchema schema=schemaSet.Schemas().OfType().FirstOrDefault();
然后,单元测试代码(上面)中的Assert.IsTrue都失败了。我两次加载同一个文件


如何让XmlSchemaSet加载键约束?两个架构都来自同一个文件(.SourceUri都是this.schemaSourceURI)。

我不知道为什么,但是schemaSet.Add(null,file)使用null而不是“”为我修复了它。

请确保在处理架构之前收到整个架构。您有一个异步事件,在处理之前必须阻止等待整个文件。谢谢您的回答!哪种方法是异步的?文档中没有关于它的内容。我想你只需要反转第2行和第3行,这样你就可以添加模式,添加事件处理程序,然后编译。在读取架构之前添加事件处理程序可能会导致验证回调错误。谢谢,但没有验证错误。MS在其示例中使用的方式与我相同:。如果两次加载同一个文件,是否在两次加载之间关闭?打开同一文件两次可能会导致此错误。