Как отключить Включает в XSD во время компиляции? - PullRequest
2 голосов
/ 25 декабря 2011

Есть ли способ сказать XmlSchemaSet игнорировать включения во время компиляции?

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

Если я не компилирую, это игнорирует включения, но я не получаю ElementSchemaTypeсвойство XmlSchemaElement, оно остается нулевым.

1 Ответ

2 голосов
/ 10 января 2012

Было бы более интересно, если бы вы могли также описать, почему вы хотели бы игнорировать внешние ссылки во время компиляции. Как правило, эти внешние ссылки (либо включают, либо импортируют) необходимы, поскольку они обеспечивают определения для компонентов, на которые фактически ссылаются, таких как тип, элемент, группа и т. Д. В общем, одно предостережение заключается в том, что переопределение не может быть выключен (он сразу выйдет из строя).

Самое близкое к вашему требованию является определение пользовательского распознавателя (начиная с XmlUrlResolver ), который вы связываете со своим читателем с помощью XmlReaderSettings ; «выключение» будет означать возвращение нуля в переопределенном методе GetEntity .

Если вместо «выключения» вы можете обнаружить, что вам нужен «редирект», то вышеизложенное определенно определит, как вы могли бы это сделать (вместо нуля вы бы вернули поток в нужную вам схему).

Одна вещь, которую вы должны иметь в виду, это то, что если XmlSchemaSet нуждается в включении / импорте, который вы хотите отключить, он никогда не скомпилируется, если он не разрешается. Если он не компилируется, то все свойства PSVI (ElementSchemaType является одним из них) не будут заполнены. Какой тип восходит к тому, почему вы хотите такую ​​вещь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...