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
相关产品推荐
相关产品推荐

