我需要实施一个需要验证对外部XSD的XML,并返回一个布尔结果表明它是否很好地形成或不是C#方法。
public static bool IsValidXml(string xmlFilePath, string xsdFilePath);
我知道如何使用回调验证 。 我想知道,如果它可以在一个单一的方法来完成,而无需使用一个回调。 我需要这个纯粹是为了美容目的:我需要验证多达几十个类型的XML文档,所以我想提出的是如下这样简单的事情。
if(!XmlManager.IsValidXml(
@"ProjectTypes\ProjectType17.xml",
@"Schemas\Project.xsd"))
{
throw new XmlFormatException(
string.Format(
"Xml '{0}' is invalid.",
xmlFilePath));
}
有一对夫妇,我可以认为这取决于你是否要使用非特殊事件例外选项。
如果你传递一个null作为验证回调委托,大部分内置的验证方法会抛出一个异常,如果是严重形成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;
}
想到的另一种选择推你的极限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;
}