У меня есть элемент, который может иметь несколько типов (не мой дизайн). Сам элемент является сложным типом с последовательностью подэлементов, и XML генерируется из сериализации свойства, и это свойство возвращает тип базового класса. Таким образом, когда генерируется XML, тип в конечном итоге становится установленным в XML, каким бы он ни был на самом деле. Например:
<Answer xsi:type="AnswerBool">
<Value xsi:type="xsd:int">-1</Value>
</Answer>
Или это может быть:
<Answer xsi:type="AnswerString">
<Value xsi:type="xsd:string">-1</Value>
</Answer>
Свойство C # выглядит так:
public AnswerBase Answer
{
get { return mViewAnswer; }
set { mViewAnswer = value; }
}
Таким образом, если переменная nViewAnswer имеет тип AnswerBool, то первый пример XML генерируется при сериализации. Если он имеет тип AnswerString, то генерируется второй XML-пример.
Итак, я работал над каким-то XSD для XML. Тем не менее, когда дело доходит до проверки, я не могу заставить это работать. Очевидно, что одним из вариантов было бы изменить структуру XML и добавить подэлементы элемента «Ответ». Однако это потребует переделки существующей функциональности, которую я предпочел бы избежать, если это возможно. Так ....
Есть ли способ, чтобы элемент имел разные типы, определенные в схеме?
Или есть ли способ настроить XSD таким образом, чтобы он игнорировал тип xsi: для этого элемента во время проверки? Я возился с любым атрибутом processContents, но я не верю, что это поможет.
Собираюсь ли я застревать, заново работая над тем, как формируется XML?