【发布时间】:2018-08-08 02:37:25
【问题描述】:
我需要根据一组 XSD 模式验证 XML 文档。有一个顶级模式可以导入其他模式,嵌套模式也可以导入一些模式。例如,模式 a.xsd 导入 b.xsd 和 c.xsd; b.xsd 导入 d.xsd。在此示例中,a.xsd 是顶级架构。
我使用以下代码进行此类验证:
static void Main(string[] args)
{
try
{
var settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ConformanceLevel = ConformanceLevel.Document;
settings.Schemas.Add("targetNs", "path/to/a.xsd");
settings.ValidationEventHandler += ValidateHandler;
var reader = XmlReader.Create("path/to/file.xml", settings);
while (reader.Read()) ;
}
catch (Exception ex)
{
throw ex;
}
}
private static void ValidateHandler(object sender, ValidationEventArgs e)
{
Console.WriteLine(e.Message);
}
虽然上面的代码隐含地使用嵌套模式进行验证,但存在一个问题:如果某些嵌套模式是无效的 XML 文档,它就会被忽略,没有任何异常。
你能帮我解决这个问题吗?
【问题讨论】:
标签: c# xml xsd xsd-validation