You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#读取带import标签的XSD并输出到控制台及导入报错解决方案

解决方法

报错根因

  • 你的XSD文件存在拼写错误:扩展基类写为gml:AbstractfeatureType,GML标准中正确类型名是gml:AbstractFeatureType,首字母F需要大写
  • 读取XSD时没有加载依赖的GML schema文件,导致程序找不到AbstractFeatureType类型和gml:_Feature替换组定义

第一步:修正XSD文件

修改对应行的基类拼写:

<xsd:extension base="gml:AbstractFeatureType">

第二步:C#实现加载带依赖的XSD并打印

使用XmlSchemaSet统一管理所有依赖的XSD,先加载GML的feature.xsd,再加载你自己的学生XSD,编译后即可输出内容。
完整代码如下:

using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

namespace ReadXsdDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                XmlSchemaSet schemaSet = new XmlSchemaSet();
                // 绑定校验错误处理
                schemaSet.ValidationEventHandler += (_, e) =>
                {
                    if (e.Severity == XmlSeverityType.Error)
                        throw new Exception(e.Message);
                };

                // 加载依赖的GML schema,替换为你本地feature.xsd的实际路径
                schemaSet.Add("http://www.opengis.net/gml", @"D:\gml\feature.xsd");
                // 加载你自己的学生XSD文件,替换为实际路径
                schemaSet.Add("SomeURL", @"D:\xsd\student.xsd");

                // 编译所有schema,自动处理依赖关联
                schemaSet.Compile();

                // 遍历打印所有schema内容
                foreach (XmlSchema schema in schemaSet.Schemas())
                {
                    Console.WriteLine($"=== 目标命名空间:{schema.TargetNamespace} ===");
                    // 格式化输出XSD文本
                    using StringWriter sw = new StringWriter();
                    using XmlWriter xw = XmlWriter.Create(sw, new XmlWriterSettings { Indent = true });
                    schema.Write(xw);
                    xw.Flush();
                    Console.WriteLine(sw.ToString());

                    // 可选:单独打印StudentType的字段明细
                    if (schema.SchemaTypes.Contains(new XmlQualifiedName("StudentType", "SomeURL")))
                    {
                        Console.WriteLine("\n=== StudentType字段明细 ===");
                        XmlSchemaComplexType studentType = (XmlSchemaComplexType)schema.SchemaTypes[new XmlQualifiedName("StudentType", "SomeURL")];
                        XmlSchemaComplexContentExtension ext = (XmlSchemaComplexContentExtension)((XmlSchemaComplexContent)studentType.ContentModel).Content;
                        XmlSchemaSequence sequence = (XmlSchemaSequence)ext.Particle;
                        foreach (XmlSchemaElement elem in sequence.Items)
                        {
                            Console.WriteLine($"字段:{elem.Name,-10} 类型:{elem.SchemaTypeName.Name,-10} 非空:{!elem.IsNillable,-5} 最小出现次数:{elem.MinOccurs}");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"处理失败:{ex.Message}");
            }
        }
    }
}

注意事项

  • 请将代码中的文件路径替换为你本地对应文件的实际存储路径,不要直接使用XSD中填写的网络地址,避免网络访问失败
  • 确认你使用的GML版本的feature.xsd中存在AbstractFeatureType类型和_Feature替换组定义,与你XSD中的引用匹配

内容的提问来源于stack exchange,提问作者user17150950

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:45:03