【问题标题】:Stumped on my I can't validate and deserialize XML难倒我的我无法验证和反序列化 XML
【发布时间】:2016-06-27 18:05:59
【问题描述】:

我很困惑为什么我不能将 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;
        }

    }

【问题讨论】:

标签: c# xml


【解决方案1】:

凯文是对的……

fileStream.Seek(0, SeekOrigin.Begin);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多