我已经读过 XmlDocument.Validate 方法没有捕获多个错误:
来自MSDN:here
如果在验证XmlDocument期间发生架构验证错误 使用正确类型的某些节点部分验证 信息和一些没有。
来自StackoverFlow:here
这正是XmlDocument.Validate方法的预期行为。 一旦找到验证错误,它就会停止验证进程并返回 错误。因此,用户必须修复该错误并再次进行验证。
此行为与Visual Studio错误列表不同。对于 例如,如果您在代码中有一个语法错误,有时它 返回100个错误。但实际上你必须只修一个 地点。所以,可能有利有弊取决于 环境。但是,我认为你不能轻易搞定所有 XMLDocument的验证错误,它以不同的方式工作 固有
但有没有人知道哪些可以捕获验证的所有错误?
答案 0 :(得分:1)
XML Serialisation NuGet package似乎支持您要查找的验证类型。
特别是,它的IsValidXml
方法使用XmlReader
(这是一种.NET类型)来启用多个错误的整理(使用out
参数)。
以下是实施(来自Github source)
/// <summary>
/// Validates an XML file against a given XSD schema with validation error messages.
/// </summary>
/// <param name="xmlFileUrl">File location of the XML file to validate.</param>
/// <param name="xmlSchemaFile">File location of the XSD schema to validate the XML file against.</param>
/// <param name="validationErrors">Collection of validation error information objects if the XML file violates the XSD schema.</param>
/// <returns>True if a valid XML file according to the XSD schema, false otherwise.</returns>
public static bool IsValidXml(
string xmlFileUrl,
string xmlSchemaFile,
out IList<Tuple<object, XmlSchemaException>> validationErrors)
{
var internalValidationErrors = new List<Tuple<object, XmlSchemaException>>();
var readerSettings = XmlSchemaReader(
xmlSchemaFile,
(obj, eventArgs) => internalValidationErrors.Add(
new Tuple<object, XmlSchemaException>(obj, eventArgs.Exception))
);
using (var xmlReader = new XmlTextReader(xmlFileUrl))
using (var objXmlReader = XmlReader.Create(xmlReader, readerSettings))
{
try
{
while (objXmlReader.Read()) { }
}
catch (XmlSchemaException exception)
{
internalValidationErrors.Add(
new Tuple<object, XmlSchemaException>(objXmlReader, exception));
}
}
validationErrors = internalValidationErrors;
return !validationErrors.Any();
}
答案 1 :(得分:-1)
Nope,XML Serialization NuGet包也会在第一个错误时停止。 M $根本不知道如何处理XML(或与技术有关的任何东西)。