我很难理解为什么我无法将XML文件验证为架构,然后将xml反序列化为类。
我可以做或者。即如果我注释掉ValidateXML,则ConvertToObject工作,反之亦然。如果两者都存在,我会收到错误:" XML文档(0,0)中出现错误" (通常当我收到此错误时,我通常在反序列化之前将文档保持打开状态。
我的主要逻辑
foreach (var myFile in Directory.EnumerateFiles(@"C:MyFolder", "*.xml"))
{
try
{
using (var fileStream = new FileStream(myFile, FileMode.Open, FileAccess.Read))
{
if (ValidateXML(fileStream))
{
CreateObjects(fileStream);
goodCounter++;
}
else
{
sb.AppendLine("Validation failed for: " + myFile);
badCounter++;
}
}
}
catch
{
sb.AppendLine(myFile);
}
}
我的验证方法:
private bool ValidateXML(Stream stream)
{
try
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(stream);
xDoc.Schemas.Add(null, @"C:My_XSD.xsd");
ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);
xDoc.Validate(eventHandler);
return true;
}
catch
{
return false;
}
}
static void ValidationEventHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
//Console.WriteLine("Error: {0}", e.Message);
throw new Exception(e.Message);
//break;
case XmlSeverityType.Warning:
//Console.WriteLine("Warning {0}", e.Message);
throw new Exception(e.Message);
//break;
}
}
答案 0 :(得分:0)
fileStream.Seek(0, SeekOrigin.Begin);