难以理解我无法验证和反序列化XML

时间:2016-06-27 18:05:59

标签: c# xml

我很难理解为什么我无法将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;
        }

    }

1 个答案:

答案 0 :(得分:0)

凯文是对的......

fileStream.Seek(0, SeekOrigin.Begin);