首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用C#通过导入根据XSD验证XML

使用C#通过导入根据XSD验证XML
EN

Stack Overflow用户
提问于 2018-02-28 17:11:35
回答 1查看 273关注 0票数 0

我需要根据一组XSD模式验证XML文档。有一个顶层模式可以导入其他模式,嵌套模式也可以导入一些模式。例如,模式a.xsd导入b.xsd和c.xsd;b.xsd导入d.xsd。在本例中,a.xsd是一个顶级模式。

我使用下面的代码来实现这样的验证:

代码语言:javascript
复制
static void Main(string[] args)
{
    try
    {
        var settings = new XmlReaderSettings();
        settings.ValidationType = ValidationType.Schema;
        settings.ConformanceLevel = ConformanceLevel.Document;
        settings.Schemas.Add("targetNs", "path/to/a.xsd");
        settings.ValidationEventHandler += ValidateHandler;

        var reader = XmlReader.Create("path/to/file.xml", settings);
        while (reader.Read()) ;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

private static void ValidateHandler(object sender, ValidationEventArgs e)
{
    Console.WriteLine(e.Message);
}

尽管上面的代码隐含地使用嵌套模式进行赋值,但是有一个问题:如果某个嵌套模式是无效的XML文档,那么它就会被忽略,没有任何异常。

你能帮我解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-02-28 20:35:20

如果您需要在验证文档之前验证模式,可以执行以下操作:

代码语言:javascript
复制
try
{
    using (FileStream fs = File.OpenRead("path/to/a.xsd"))
    {
        XmlSchema schema = XmlSchema.Read(fs, ValidateHandler);
    }
}
catch (Exception e)
{
    throw new Exception("Schema file is invalid. " + e.Message);
}

然后将该模式添加到您的设置中,如下所示:

代码语言:javascript
复制
schema.TargetNamespace = "targetNs";
settings.Schemas.Addschema(schema);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49025772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档