Проверьте подмножество xml, используя подмножество схемы в c # .net XmlDocument - PullRequest
1 голос
/ 10 января 2012

В настоящее время у меня есть решение, которое строит XML-документ по нескольким разделам, а затем проверяет окончательный составной XML-файл по одной схеме.Можно ли использовать подмножество одной и той же схемы для индивидуальной проверки каждого раздела?

1 Ответ

1 голос
/ 03 февраля 2012

Ответ - да, в большинстве случаев. Отказ от ответственности, теоретически кто-то может намеренно написать XML-схему, которая сделает некоторые мои предложения невозможными, но тогда это будет просто плохой практикой в ​​разработке XSD.

Для простого решения должны быть выполнены следующие допущения:

  • Раздел - это правильно сформированный XML; вы объединяете узлы XmlElement. E.g.:

    ... атрибут содержимого > ... больше контента </ Секция-элемент>
  • Каждый из объединяемых разделов имеет соответствующее объявление глобального элемента в вашем наборе XML-схем. Если вы используете атрибут xsi: type для любого из ваших разделов, все может стать немного сложнее, но не трудно исправить.

Проверка будет обычным кодом, где XmlReader будет XmlNodeReader на соединяемом узле. Используйте XmlReaderSettings как обычно ...

Вышеуказанное будет работать для любого XSD (у вас нет зависимости времени разработки от знания XSD). Для всего ниже, код должен соответствовать вашему XSD ...

Если у вас нет совпадающих глобальных элементов в схеме XML, вам нужно посмотреть на тип каждого соответствующего объявления локального элемента. Если тип является глобальным, то вы можете легко создать в памяти фиктивные элементы, соответствующие вашим разделам, глобального типа (в предположении Venetian Blind стиль авторинга).

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

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