Ответ 1
Есть несколько вариантов, о которых я могу думать, в зависимости от того, хотите ли вы использовать исключения для не исключительных событий.
Если вы передадите 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;
}