根据C中引用的XSD验证XML#

我有一个具有指定架构位置的XML文件,例如:

xsi:schemaLocation=“someurl..\localSchemaPath.xsd”

我想在C#中进行验证。当我打开文件时,VisualStudio会根据模式对其进行验证,并完美地列出错误。然而,不知何故,如果不指定要验证的模式,我似乎无法在C#中自动验证它,例如:

XmlDocument资产=新的XmlDocument();
XmlTextReader SchemaAreder=新的XmlTextReader(“relativeSchemaPath”);
XmlSchema=XmlSchema.Read(SchemaAreder,SchemaValidationHandler);
asset.Schemas.Add(schema);
加载(文件名);
asset.Validate(DocumentValidationHandler);

难道我不能用XML文件中指定的模式自动进行验证吗?我错过了什么

您需要创建一个XmlReaderSettings实例,并在创建时将其传递给XmlReader。然后,您可以订阅设置中的ValidationEventHandler,以接收验证错误。您的代码最终将如下所示:

使用System.Xml;
使用System.Xml.Schema;
使用System.IO;
公共类ValidXSD
{
公共静态void Main()
{
//设置验证设置。
XmlReaderSettings设置=新建XmlReaderSettings();
settings.ValidationType=ValidationType.Schema;
settings.ValidationFlags |=XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |=XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationFlags |=XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler+=新的ValidationEventHandler(ValidationCallBack);
//创建XmlReader对象。
XmlReader=XmlReader.Create(“inlineSchema.xml”,设置);
//解析文件。
while(reader.Read());
}
//显示任何警告或错误。
私有静态void ValidationCallBack(对象发送方,ValidationEventArgs args)
{
如果(args.Severity==XmlSeverityType.Warning)
Console.WriteLine(“\t警告:未找到匹配的架构。未进行任何验证。”+args.Message);
其他的
Console.WriteLine(“\t验证错误:+args.Message”);
}
}

发表评论