我正在移植一些代码到ASP。. NET 5,并希望以DNX Core 5.0为目标。但是,我在定位针对XSD文档验证XML文档所需的类型时遇到了麻烦。
代码如下:
var xsdStream = this.GetType().GetTypeInfo().Assembly.GetManifestResourceStream(xsdPath);
using (XmlReader xsd = XmlReader.Create(xsdStream))
{
XmlSchemaSet schema = new XmlSchemaSet();
schema.Add(null, xsd);
XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
xmlReaderSettings.ValidationType = ValidationType.Schema;
xmlReaderSettings.Schemas.Add(schema);
using (XmlReader xmlReader = XmlReader.Create(xmlPath, xmlReaderSettings))
{
try
{
while (xmlReader.Read());
}
catch (Exception ex)
{
throw new Exception(string.Format(Resources.Messages.XmlValidationFailed, xmlPath), ex);
}
}
}
如您所见,我只想在出现第一个错误时停止,并抛出一个异常,指出错误是什么。
问题是:
-
XmlSchemaSet
类不存在于System.Xml.Schema
命名空间(或我发现的其他任何地方)。 -
XmlReaderSettings.ValidationType
和XmlReaderSettings.Schemas
属性不存在
我检查了MSDN文档,它有一个稍微不同的方法。然而,和之前一样,XmlSchemaSet
不存在,XDocument.Validate()
也不存在。我也搜索了几个ASP。. NET项目的一个例子,但似乎找不到任何。
DNX Core 5.0中有哪些工具(如果有的话)可以根据XSD验证XML ?如果可能的话,我更愿意使用流来实现这一点,但如果绝对有必要,我将接受一种方法,即立即将整个文档读入内存。
在第一个版本中不支持XSD。当我在推特、帖子、bug或社区中听到他们所做的事情时,就会考虑在以后发布。
ps: Pawel应该回答这个问题并得到学分…但是我们应该结束这个问题