我需要实现一个 C# 方法,该方法需要根据外部 XSD 验证 XML 并返回一个 bool 结果,指示它是否格式正确。
public static bool IsValidXml(string xmlFilePath, string xsdFilePath);
我知道如何 validate using a callback .我想知道它是否可以在不使用回调的情况下通过单一方法完成。我需要这个纯粹是为了装饰目的:我需要验证多达几十种类型的 XML 文档,所以我想做的是像下面这样简单的东西。
if(!XmlManager.IsValidXml(
@"ProjectTypes\ProjectType17.xml",
@"Schemas\Project.xsd"))
{
throw new XmlFormatException(
string.Format(
"Xml '{0}' is invalid.",
xmlFilePath));
}
最佳答案
根据您是否要对非异常事件使用异常,我可以想到几个选项。
如果您将 null 作为验证回调委托(delegate)传递,如果 XML 格式错误,大多数内置验证方法将抛出异常,因此您可以简单地捕获异常并返回 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;
}
想到的另一个选项是在不使用回调 条件的情况下突破您的限制。您可以不传递预定义的回调方法,而是传递匿名方法并使用它来设置
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;
}
关于c# - 在单一方法中根据 XSD 验证 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10025986/