Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中使用xsd验证xml文件。。它实际验证了多少?_C#_Xml_Validation_Xsd - Fatal编程技术网

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

在C#中使用xsd验证xml文件。。它实际验证了多少?,c#,xml,validation,xsd,C#,Xml,Validation,Xsd,我一直在尝试为我的xml文件制作一个验证器。我使用了一些其他的例子,可以在这个网站上找到(如) 我只是看不到它按我预期的方式工作。什么是真正得到验证的 几乎无论我在xml文件中做了什么更改,验证器都会将其视为一个错误。我认为验证器会查看xml文件是否包含xsd中未定义的元素。验证器仅捕获正常的xml语法错误 那么,如果xsd没有影响,那么使用它有什么意义呢 我的验证器 string xsd_file = "Message.xsd"; XmlSchema xsd = new XmlSchema()

我一直在尝试为我的xml文件制作一个验证器。我使用了一些其他的例子,可以在这个网站上找到(如)

我只是看不到它按我预期的方式工作。什么是真正得到验证的

几乎无论我在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;
        }                        
    }
}

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

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

settings.ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema | XmlSchemaValidationFlags.ReportValidationFlags;
不记得为什么我要加上它


首先要做的是确保触发了eventhandler,之后您的xsd可能会出现问题。

看看这个[因此发布和响应][1]。它详细解释了如何进行验证。[1]: