我正在针对架构xsd验证XML文件。到目前为止,代码在发生故障时会生成异常。
bool isValid = true;
List<string> errorList = new List<string>();
try
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(null, schemaFilePath);
settings.ValidationType = ValidationType.Schema;
XmlDocument document = new XmlDocument();
document.LoadXml(xml);
XmlReader rdr = XmlReader.Create(new StringReader(document.InnerXml), settings);
while (rdr.Read()) { }
}
catch (Exception ex)
{
errorList.Add(ex.Message);
isValid = false;
}
LogErrors(errorList);
return isValid;
但是我需要代码在将其发送到我的日志之前构建一个在validate中找到的所有错误的列表,而不是总是只显示找到的第一个错误。
有什么想法吗?
答案 0 :(得分:10)
您可以将Validate
method与ValidationEventHandler
一起使用。您可以按照MSDN的方式单独创建ValidationEventHandler
,也可以根据需要内联。
e.g
//...Other code above
XmlDocument document = new XmlDocument();
document.Load(pathXMLCons);
document.Validate((o, e) =>
{
//Do your error logging through e.message
});
如果你不这样做,将抛出XmlSchemaValidationException
,只有那个可以被抓住。
答案 1 :(得分:1)
我尝试过在我的情况下失败的XmlDocument。 以下代码应该有效 礼貌:C#5.0简而言之
XDocument doc = XDocument.Load("contosoBooks.xml");
XmlSchemaSet set = new XmlSchemaSet();
set.Add(null, "contosoBooks.xsd");
StringBuilder errors = new StringBuilder();
doc.Validate(set, (sender,args) => { errors.AppendLine(args.Exception.Message); });
Console.WriteLine(errors);