首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XmlSchemaSet加载没有键约束的模式

XmlSchemaSet加载没有键约束的模式
EN

Stack Overflow用户
提问于 2016-12-23 10:33:23
回答 1查看 409关注 0票数 3

当我通过以下代码加载XMLSchema时:

代码语言:javascript
复制
_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();

并执行以下单元测试代码:

代码语言:javascript
复制
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模式时

代码语言:javascript
复制
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)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-29 09:34:27

我不知道为什么,但是schemaSet.Add( null,file)用null而不是"http://www.w3.org/2001/XMLSchema“为我修复了它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41299728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档