我有一个元素可以有多种类型(不是我的设计)。元素本身是一个具有一系列子元素的复杂类型,XML是从一个属性的序列化生成的,并且该属性返回一个基类的类型。所以当生成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检查。
所以我一直在为XML的某种XSD工作。然而,当涉及到验证时,我似乎无法得到这个工作。显然,一种选择是改变XML的结构,并具有“Answer”元素的子元素。但是,这需要重新使用现有的功能,如果可能的话,我宁愿避免这些功能。所以......
有没有什么办法让一个元素在模式中定义不同的类型?
或者有什么办法让XSD设置,以便它在验证过程中忽略该元素的xsi:类型?我一直在摆弄anyAttribute processContents,但我不相信这会有所帮助。
我会被卡住重新工作如何形成XML?
看看你是如何得到它的工作是有用的,你可以回答自己的问题并接受它作为答案。至少这样,如果他们试图做类似的事情,它会给别人阅读完整的文章。 :) – 2009-09-11 10:05:51
一旦我有100%的工作,我会做到这一点。我被困在最后一个问题上。 – Eves 2009-09-11 13:25:45