如何在编译期间关闭XSD中的include

本文关键字:XSD 中的 include 编译 | 更新日期: 2023-09-27 18:18:42

是否有办法告诉XmlSchemaSet在编译过程中忽略包含?

var schemaSet = new XmlSchemaSet();
schemaSet.ValidationEventHandler += ValidationCallback;
schemaSet.Add(targetNamespace, filepath);
schemaSet.Compile();

如果我不编译,那忽略了包含,但我没有得到XmlSchemaElementElementSchemaType属性,它仍然为空。

如何在编译期间关闭XSD中的include

如果您还能说明为什么要在编译过程中忽略外部引用,那就更有趣了。通常,需要这些外部引用(包括或导入),因为它们将为实际引用的组件(如类型、元素、组等)提供定义。一般来说,需要注意的一点是,不能关闭重新定义(它会立即失败)。

你能得到的最接近你的要求是定义一个自定义解析器(从XmlUrlResolver扩展),你通过XmlReaderSettings与阅读器关联;"关闭"会在重写GetEntity方法中转换为返回null。

如果不是"关闭",你可能会发现你需要一个"重定向",那么上面的方法绝对是你可以做到的(而不是一个空,你会返回一个流到你想要的模式)。

您必须记住的一件事是,如果XmlSchemaSet需要关闭包含/导入,那么如果无法解析,它将永远无法编译。如果它没有编译,那么所有的PSVI属性(ElementSchemaType是其中之一)都不会被填充。这又回到了你为什么想要这样的东西?