在C#中使用xsd验证xml文件。它实际验证了多少?

时间:2012-03-23 13:38:08

标签: c# xml validation xsd

一直在尝试为我的xml文件制作验证器。我已经使用了一些可以在这个网站上找到的其他例子(比如How to validate an XML document?)。

我只是没有看到它按照我期望的方式工作。实际得到什么验证?

几乎无论我在xml文件中更改了什么,验证器都会将其视为错误。我认为验证器会看到xml文件是否包含未在xsd中定义的元素。验证程序仅捕获正常的xml语法错误。

如果它没有影响,那么使用xsd是什么意思?

我的验证员

string xsd_file = "Message.xsd";
XmlSchema xsd = new XmlSchema();
xsd.SourceUri = xsd_file;

XmlSchemaSet ss = new XmlSchemaSet();
ss.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler);
ss.Add(null, xsd_file);
if (ss.Count > 0)
{
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas.Add(ss);
    settings.Schemas.Compile();
    settings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler);
    XmlTextReader r = new XmlTextReader(filepath);
    using (XmlReader reader = XmlReader.Create(r, settings))
    {
        try
        {
            while (reader.Read())
            {
            }
        }
        catch (XmlException ex)
        {

            throw;
        }                        
    }
}

1 个答案:

答案 0 :(得分:0)

缺少验证事件处理程序的代码。

看看我的工作代码略有不同,我有这个

settings.ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema | XmlSchemaValidationFlags.ReportValidationFlags;

不记得为什么我必须添加它。

要做的第一件事是确保触发事件处理程序,之后可能是xsd的问题。