【问题标题】:How to Validate xml against XSD in C# windows forms如何在 C# windows 窗体中针对 XSD 验证 xml
【发布时间】:2014-10-04 15:47:40
【问题描述】:

所有可通过网络获取的C# 代码仅用于读取和加载XMLXSD

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(@"D:\XML\Sample.xml");
xmlDocument.Schemas.Add("http://www.w3.org/2001/XMLSchema", @"D:\XML\Sample.xsd");
xmlDocument.Schemas.Compile();

ValidationEventHandler eventhandler = new ValidationEventHandler(ValidationEventHandler);
xmlDocument.Validate(eventhandler);

if (valid == true)
{
    label1.Text = "Xml Got Validated!!";
}

void ValidationEventHandler(object sender, ValidationEventArgs e)
{
    valid = false;
    switch (e.Severity)
    {
        case XmlSeverityType.Error: label1.Text = "Xml Validation Failed".ToString();
            break;
        case XmlSeverityType.Warning: label1.Text = "Xml Has some warning".ToString();
            break;
    }
}

这实际上并没有验证我的XML 只是阅读,即使我没有传递强制性元素它说:“ITS Valid”

【问题讨论】:

  • 这我试图从 1 个月开始做请帮助:(

标签: c#-4.0


【解决方案1】:

我使用以下内容并成功应用验证:

var xsd = new XmlSchemaSet();

using (var ms = new StringReader(Resources.MyXsd))
{
    using (var reader = XmlReader.Create(ms))
    {
        xsd.Add(XmlSchema.Read(reader, delegate { }));
    }
}

var document = XDocument.Parse(text);

document.Validate(
    xsd, (o, e) =>
        {
            if (e.Severity == XmlSeverityType.Error)
            {
                validationMessages.Add(e.Exception.Message);
            }
        }
);

【讨论】:

  • 你能告诉我我的 xml 和 xsd 第一行标签应该是什么吗?我在 xsd shud 中的目标 namspace 是否与 xml 中的命名空间匹配?我也这样做了,但仍然没有验证。 ny1 能否给我准确的语法,用于 xml 和 xsd 的第一行标记它应该如何'
  • 使用这个,我似乎跳过了验证。即使针对 xsd 运行完全不同的 xml,我也完全没有错误。知道为什么会这样吗?
猜你喜欢
  • 1970-01-01
  • 2020-03-17
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
相关资源
最近更新 更多