在单个方法中针对XSDvalidationXML

我需要实现一个C#方法,该方法需要针对外部XSDvalidationXML并返回一个布尔结果,指示它是否格式正确。

public static bool IsValidXml(string xmlFilePath, string xsdFilePath); 

我知道如何使用回调进行validation 。 我想知道它是否可以在一个方法中完成,而不使用回调。 我需要这个纯粹用于美容目的:我需要validation多达几十种类型的XML文档,所以我想做的就像下面这样简单。

 if(!XmlManager.IsValidXml( @"ProjectTypes\ProjectType17.xml", @"Schemas\Project.xsd")) { throw new XmlFormatException( string.Format( "Xml '{0}' is invalid.", xmlFilePath)); } 

我可以考虑几种选择,具体取决于您是否要对非exception事件使用exception。

如果传递null作为validation回调委托,则大多数内置validation方法将在XML格式错误时抛出exception,因此您可以简单地捕获exception并根据情况返回true / false

 public static bool IsValidXml(string xmlFilePath, string xsdFilePath, XNamespace namespaceName) { var xdoc = XDocument.Load(xmlFilePath); var schemas = new XmlSchemaSet(); schemas.Add(namespaceName, xsdFilePath); try { xdoc.Validate(schemas, null); } catch (XmlSchemaValidationException) { return false; } return true; } 

想到的另一个选项会在without using a callback标准的without using a callback推动您的限制。 您可以改为传递匿名方法并使用它来设置true / false返回值,而不是传递预定义的回调方法。

 public static bool IsValidXml(string xmlFilePath, string xsdFilePath, XNamespace namespaceName) { var xdoc = XDocument.Load(xmlFilePath); var schemas = new XmlSchemaSet(); schemas.Add(namespaceName, xsdFilePath); Boolean result = true; xdoc.Validate(schemas, (sender, e) => { result = false; }); return result; }