【问题标题】:validate xml file using xsd in C#.. How much does it actually validate?在 C# 中使用 xsd 验证 xml 文件。它实际验证了多少?
【发布时间】:2012-03-23 13:38:08
【问题描述】:

一直在尝试为我的 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;
        }                        
    }
}

【问题讨论】:

标签: c# xml validation xsd


【解决方案1】:

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

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

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

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

首先要做的是确保事件处理程序被触发,然后它可能是您的 xsd 的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多