天道酬勤,学无止境

XSD 中的 xs:choice 是否允许结果 XML 中有多个元素?(Does xs:choice in XSD allows multiple elements in resulting XML?)

问题

我坚持使用 XSD 的“选择”元素描述。 它指出,在有效的 XML 中只能找到该标签内找到的元素中的一个元素:

允许包含在所选组中的一个且仅一个元素出现在包含元素中。

(http://msdn.microsoft.com/en-us/library/ms256109%28v=vs.110%29.aspx)

另一方面,看起来属性maxOccurs="unbounded"可能会改变情况,现在任何数量的元素都可能出现在用 'choice' 描述的类型中:请参考这个问题:

XSD - 如何以任意顺序允许任意次数的元素?

那么在里面有选择指示符的类型中可以找到多少个元素?

回答1

说选择允许“所选组中包含的一个且仅一个元素”的 MSDN 页面措辞不当。 嗯,不,那太慷慨了。 作为 xsd:choice 的描述,它是完全错误的。

一个选择包含零个或多个备选方案,并且当且仅当这些备选方案中的至少一个与输入匹配时才匹配输入的一部分。 (实际上,这几乎总是意味着“如果这些备选方案中的一个恰好与输入匹配”:如果有多个备选方案与输入匹配,则内容模型几乎肯定违反了“唯一粒子属性”规则。)

因此,当且仅当 A1 与输入中的元素序列匹配时,A1、A2、A3、... An 之间的选择才匹配该序列,或者 A2、A3、... 或 An。

如果每个备选 A1, ..., An 是 minOccurs = maxOccurs = 1 的单个元素,那么它们都不可重复,如果选择本身不可重复,那么您引用的描述或多或少是准确的。 但是有几种情况中的任何一种都可能导致多个元素被一个选择匹配:

  • 选择本身可能是可重复的(正如 lexicore 已经指出的那样); 以下选项匹配 A、B 和 C 元素的任何序列:

     <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element ref="A"/> <xsd:element ref="B"/> <xsd:element ref="C"/> </xsd:choice>
  • 个别替代方案可能是可重复的; 以下选择匹配 A 元素的任何非空序列,或 B 元素的任何非空序列,或恰好一个 C 元素:

     <xsd:choice> <xsd:element ref="A" maxOccurs="unbounded"/> <xsd:element ref="B" maxOccurs="unbounded"/> <xsd:element ref="C"/> </xsd:choice>
  • 单独的选择可能是匹配多个元素的序列或选择; 以下选择匹配 A 和 B 元素的任何非空序列,或序列 D、E、F:

     <xsd:choice> <xsd:choice maxOccurs="unbounded"> <xsd:element ref="A"/> <xsd:element ref="B"/> </xsd:choice> <xsd:sequence> <xsd:element ref="D"/> <xsd:element ref="E"/> <xsd:element ref="F"/> </xsd:sequence> </xsd:choice>

你的问题的答案

那么在里面有选择指示符的类型中可以找到多少个元素?

与问题的答案相同

那么在一个元素中可以找到多少个元素呢?

要么

那么与正则表达式匹配的符号序列有多长?

回答2

那么在里面有选择指示符的类型中可以找到多少个元素?

取决于choice元素的minOccurs / maxOccurs

正好是child1child2

<xs:choice>
  <xs:element name="child1" type="xs:int"/>
  <xs:element name="child2" type="xs:string"/>
</xs:choice>

child1child2或无:

<xs:choice minOccurs="0">
  <xs:element name="child1" type="xs:int"/>
  <xs:element name="child2" type="xs:string"/>
</xs:choice>

child1child2至少一个或多个,按任意顺序:

<xs:choice maxOccurs="unbounded">
  <xs:element name="child1" type="xs:int"/>
  <xs:element name="child2" type="xs:string"/>
</xs:choice>

零个或多个child1child2 ,按任意顺序:

<xs:choice minOccurs="0" maxOccurs="unbounded">
  <xs:element name="child1" type="xs:int"/>
  <xs:element name="child2" type="xs:string"/>
</xs:choice>

我个人试图避免模式中的可重复选择和序列,因为它们使结构过于“异构”。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • XSD-如何允许元素以任意顺序多次出现?(XSD - how to allow elements in any order any number of times?)
    问题 我正在尝试创建一个XSD,并尝试编写具有以下要求的定义: 允许指定的子元素出现任意次数(0到无界) 允许子元素以任何顺序排列 我环顾四周,发现了各种解决方案,如下所示: <xs:element name="foo"> <xsl:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="child1" type="xs:int"/> <xs:element name="child2" type="xs:string"/> </xs:choice> </xs:complexType> </xs:element> 但是据我了解,xs:choice仍然仅允许单个元素选择。 因此,像这样将MaxOccurs设置为无界仅意味着“任何一个”子元素可以出现多次。 这是正确的吗? 如果上述解决方案不正确,我该如何达到我在要求中所说的? 编辑:如果要求如下? 元素child1 child2可以出现任意次(0到无界) 元素可以按任何顺序排列元素child3和child4应该恰好出现一次。 例如,此xml有效: <foo> <child1> value </child1> <child1> value </child1> <child3> value </child3> <child2> value
  • XML Schema 中的嵌套选择元素?(Nested choice element in XML Schema?)
    问题 我想要做的是,声明一个名为“data”的父元素,这两个元素的 6 个子元素是有条件的,这意味着如果选择元素 A,则 B 不会出现在“data”中。 像这样: <data> <A>text1</A> <B>text1</B> <C>text1</C> <D>text1</D> <E>text1</E> or <F>text1</F> </data> 要求 1:所有元素可以以任意顺序出现任意次数。 要求 2:元素 E 和 F 是有条件的,这意味着只有其中之一出现在数据中。 我的 xsd 代码是这样的: <xs:element name="data"> <xs:complexType> <xs:sequence> <xs:element name="sequence" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded" > <xs:element ref="A" /> <xs:element ref="B" /> <xs:element ref="C" /> <xs:element ref="D" /> <xs:choice> <xs:element ref="E" /> <xs:element ref="F" /> <xs
  • 使用XSD验证XML……但仍然允许扩展(Validating XML with XSDs … but still allow extensibility)
    问题 也许是我,但是看来,如果您有XSD <?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="User"> <xs:complexType> <xs:sequence> <xs:element name="GivenName" /> <xs:element name="SurName" /> </xs:sequence> <xs:attribute name="ID" type="xs:unsignedByte" use="required" /> </xs:complexType> </xs:element> </xs:schema> 定义此文档的架构 <?xml version="1.0" encoding="utf-8" ?> <User ID="1"> <GivenName></GivenName> <SurName></SurName> </User> 如果您添加了另一个元素(例如EmailAddress)并混淆了订单,它将无法验证 <?xml version="1.0"
  • 用于“这些元素中的任何一个或多个,但必须至少一个”的XML模式构造(XML schema construct for “any one or more of these elements but must be at least one”)
    问题 我正在尝试建立一个类似于“序列”的架构,其中所有子元素都是可选的,但是必须存在至少一个元素,并且可以有多个元素。 我尝试执行以下操作,但是XMLSpy抱怨“内容模型包含元素<element name =“ DateConstant”>和<element name =“ DateConstant”>不能唯一确定的元素。”: <xs:choice> <xs:sequence> <xs:element name="DateConstant"/> <xs:element name="TimeConstant"/> </xs:sequence> <xs:element name="DateConstant"/> <xs:element name="TimeConstant"/> </xs:choice> 可以做到这一点(如果可以的话,如何做到)? 一些澄清:我只想允许每个具有相同名称的元素之一。 可以有一个“ DateConstant”和/或一个“ TimeConstant”,但不能有两个。 Gizmo的答案符合我的要求,但是对于大量元素来说是不切实际的。 赫斯特(Hurst)的答案允许两个或多个具有相同名称的元素,但我不希望这样。 回答1 试试这个: <xs:choice> <xs:sequence> <xs:element name="Elem1" /> <xs:element
  • XML 模式 - 依赖于可选属性存在的子元素(XML Schema - child elements dependent on existence of optional attribute)
    问题 是否可以在 XSD 中定义以下场景: 父元素有一个属性是可选的。 如果属性不是present in XML, at least one child element must exists. 如果attribute is present, there can be zero or more child elements. 例子: 有效的 <parent externel-source="some_name" /> <parent externel-source="some_name"> <child>some value</child> </parent> <parent> <child> some value</child> </parent> 无效 <parent /> 回答1 不,我不认为。 回答2 不..原因是:在你的情况下,你试图根据其他标签/属性的值来验证元素/标签的存在..(XSD基本上是一组声明),它需要多次声明相同的元素 .. XSD 中不允许对同一元素进行多次声明 .. :-( 查看 stackOverFlow 成员发布的类似问题(单击此处) 回答3 很抱歉重发这条消息,但我想我可以补充一点关于事物的“为什么”。 W3C XML Schema 要求其所有序列都是完全确定的。 出于性能/简单性的原因,它不是为向前看或向后看而设计的,仅适用于当前元素。
  • NET中正确的XML序列化和“混合”类型的反序列化(Correct XML serialization and deserialization of “mixed” types in .NET)
    问题 我当前的任务涉及编写一个用于处理HL7 CDA文件的类库。 这些HL7 CDA文件是具有定义的XML模式的XML文件,因此我使用xsd.exe生成了用于XML序列化和反序列化的.NET类。 XML模式包含各种类型,这些类型包含mixed =“ true”属性,该属性指定此类型的XML节点可以包含与其他XML节点混合的普通文本。 这些类型之一的XML模式的相关部分如下所示: <xs:complexType name="StrucDoc.Paragraph" mixed="true"> <xs:sequence> <xs:element name="caption" type="StrucDoc.Caption" minOccurs="0"/> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="br" type="StrucDoc.Br"/> <xs:element name="sub" type="StrucDoc.Sub"/> <xs:element name="sup" type="StrucDoc.Sup"/> <!-- ...other possible nodes... --> </xs:choice> </xs:sequence> <xs:attribute name="ID"
  • 任何顺序的 XML 元素,有些是必需的,有些则不是(XML Elements in Any Order, Some Required and Others Aren't)
    问题 我正在尝试以任何顺序允许的元素列表。 一些元素是必需的(最小值为 1,最大值为 1),一些元素是可选的,最大值为 1,一些元素是可选的,具有任意数量。 这就是我所拥有的并且 XSD 是有效的,但是当我去验证 XML 时,我尝试实施的规则并没有被强制执行。 例如,id 不是必需的。 <xsd:complexType name="feedType"> <xsd:annotation> <xsd:documentation> The Atom feed construct is defined in section 4.1.1 of the format spec. </xsd:documentation> </xsd:annotation> <xsd:choice minOccurs="3" maxOccurs="unbounded"> <xsd:element name="author" type="atom:personType" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="category" type="atom:categoryType" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="contributor" type="atom
  • xml 模式并使用选择作为文档根(xml schema and using a choice as the document root)
    问题 我有一个新手 xml 模式问题。 我相信答案是我需要做的事情在模式下是不可能的,但我想确定。 问题是我有一个 web 服务,它在成功时返回一个包含一种根元素类型的响应(比如 <Response>),在完全失败时返回一个具有不同根元素(比如 <Exception>)的文档。 所以,基本上,两个完全不同的文件: <响应>......</响应> 或 <异常>....</异常> 是否可以用一个模式文档来描述这两个不同的文档? 就像我想要一个选项作为模式元素下的第一个元素——但这不是有效的语法。 我尝试了几个解析为有效 xsd 的变体,但不验证文档。 有什么建议么? 或者这根本不可能? 非常感谢提前 - m 回答1 实际上,XML 模式确实允许您在单个模式中定义替代根元素,尽管不能使用choice元素。 相反,您需要做的就是列出每个可能的根作为schema元素的直接子元素。 例如,给定以下 XML 架构: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="foo"> ... </xs:element> <xs:element name="bar"> ... </xs:element> </xs:schema> 以下任一文件都会对其进行验证: <foo> ... </foo> 或者:
  • 如何在XSD中使用xsi:type限制XML元素的值?(How to restrict the value of an XML element using xsi:type in XSD?)
    问题 我想根据属性值验证元素的文本值。 例如 <Device xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Parameter xsi:type="xsd:unsignedInt">-100</Parameter> <Parameter xsi:type="xsd:boolean"></Parameter> <Parameter>hello</Parameter> </Device> 以上两种均应失败。 对于布尔值,除“ true”或“ false”(甚至为空字符串)之外,不应接受任何其他内容 我的xml复杂得多,其中包含许多“ Object和“ Parameter节点,而这是我的xsd,它递归地验证了所有这些节点 <xs:complexType name="deviceType"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="Object"/> <xs:element ref="Parameter"/> </xs:choice> </xs:complexType> <xs:complexType name="objType"> <xs
  • XSD“一个或两个”选择结构导致内容模型不明确(XSD “one or both” choice construct leads to ambiguous content model)
    问题 我正在尝试制作一个简单的 XSD 选择构造,允许两个引用元素中的一个或两个,但不是没有。 该构造与下面类似,但我不断收到歧义错误。 我错过了什么? <xs:schema xmlns:xs="..."> <xs:element name="Number" type="xs:integer"/> <xs:element name="Text" type="xs:string"/> <xs:element name="RootStructure"> <xs:complexType> <xs:sequence> <xs:choice> <xs:sequence> <xs:element ref="Number"/> <xs:element ref="Text"/> </xs:sequence> <xs:element ref="Number"/> <xs:element ref="Text"/> </xs:choice> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 回答1 通常的做法是这样的: <xs:schema xmlns:xs="..."> <xs:element name="Number" type="xs:integer"/> <xs:element name="Text" type="xs
  • 如何在 XML 模式中指定必须存在两个字段之一?(How to specify in an XML schema that either one of two fields must be present?)
    问题 我想指定fieldname或freetext必须始终存在于适用于此 XSD 的 XML 文件中。 有没有办法做到这一点? <xs:complexType name="tSome"> <xs:sequence> <!-- either one of the two below has to be present. --> <xs:element name="fieldname" type="xs:string" /> <xs:element name="freetext" type="xs:string" /> <!-- this one below must always be present --> <xs:element name="dbtablename" type="xs:string" /> </xs:sequence> </xs:complexType> 回答1 XML Schema 中有一个 Choice Indicator,它允许您选择一个包含的元素,但不能选择两个或更多。 如果你想要 3 中的任何 2,我建议做这样的事情: <xs:choice> <xs:element name="fieldname" type="xs:string" minOccurs="0" maxOccurs="1" /> <xs:element name="freetext"
  • XSD不允许我对所有指标进行无限制的操作(XSD doesn't allow me to have unbounded inside all indicator)
    问题 我试图使var1中的变量的无序列表出现两次,而var2出现无限次(我的项目中的用例是不同的)。 该元素不允许我使用maxOccurs。 我正在尝试做什么工作? <?xml version="1.0" encoding="ISO-8859-1"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="testcomment"> <xs:complexType> <xs:all> <xs:element name="var1" type="xs:string" maxOccurs="2" /> <xs:element name="var2" type="xs:integer" maxOccurs="unbounded" /> </xs:all> </xs:complexType> </xs:element> </xs:schema> 回答1 您试图做的事情听起来像列表中元素的类型可能会模棱两可,而无需事先阅读,在这种情况下,由于XSD可以描述的语言种类,因此无法解决。 您可以发布XSD的相关部分吗? 更新:不,您不能使用XSD做到这一点。 例如,此处列出了有关可以放入<xs:all>元素的规则。 此约束具有一个名称-UPA或“唯一粒子归因”约束。 这一切都与歧义有关
  • 模式中内容模型的歧义(Content model ambiguity in a schema)
    问题 可能我盯着这个问题太久了,可能没有答案; 不管怎样,我现在在这里。 我试图在 XSD 中允许一组可能的组合,但我似乎无法找到一种不会导致歧义的方法。 快速正则表达式: foo+ ( bar baz* | bar? baz+ qux* ) foo是必需的(一个或多个) 如果bar存在,则baz是可选的(零个或多个) 如果baz存在,则bar是可选的(零或一),而qux是可选的(零或更多) 如果baz不存在, qux就不能存在 给定foo bar baz会产生歧义。 不明确的XSD文件: <xs:element name="parent"> <xs:complexType> <xs:sequence> <xs:element name="foo" minOccurs="1" maxOccurs="unbounded" /> <xs:choice> <xs:sequence> <xs:element name="bar" minOccurs="1" maxOccurs="1" /> <xs:element name="baz" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> <xs:sequence> <xs:element name="bar" minOccurs="0" maxOccurs="1" /> <xs
  • 修复:全局元素“配置”已经声明(Fix: The Global element 'configuration' has already been declared)
    问题 我使用了如何解决“找不到元素/属性 <xxx> 的架构信息”的第二种解决方案? 即用创建方案的按钮创建了一个 XSD。 我将 app.config 中的样式表更改为 app.xsd 但现在我收到警告: 全局元素“配置”已经在 app.xsd 中声明 即使更改名称也会显示警告。 有人对此有解决方案吗? 回答1 我遇到了与您所指的问题类似的问题,我按照这些说明进行操作,一切都很好。 首先确保EnterpriseLibrary.Configuration.xsd位于%ProgramFiles%\Microsoft Visual Studio [version]\Xml\Schemas\中,然后执行以下操作: 企业库将架构安装到 Visual Studio 中,该架构提供用于在 Visual Studio XML 编辑器中编辑企业库配置文件的 IntelliSense®。 您必须先打开架构,然后才能使用它。 启用企业库配置架构 通过在解决方案资源管理器中双击它,在 Visual Studio 中打开配置文件。 在 XML 菜单上,单击架构...以打开 XML 架构对话框。 找到名为 EnterpriseLibrary.Configuration.xsd 的架构。 这是自动安装的。 但是,如果它未显示在列表中,请单击添加并导航到文件夹 %Program Files%\Microsoft
  • 最佳 JAXB XJC 代码生成和最佳 XML 模式继承(Optimal JAXB XJC code generation and optimal XML schema with inheritance)
    问题 有很多类似的问题专注于优化的一个方面,但每个解决方案都有一个丑陋的缺点。 假设我想开发一个 XML 模式 (XSD),它允许以下文档并想使用 XJC 生成类: <Catalogue> <Book>...</Book> <Journal>...</Journal> <Book>...</Book> ... </Catalogue> 模式应该对类型层次结构建模( Book和Journal是Publication子类)。 自然,生成的 Java 类也应该如此。 我尝试了以下方法,这些方法都有一个主要问题: 1.) 建模目录包含所有可能的子类型的xsd:choice 。 <xsd:complexType name="Catalogue"> <xsd:choice maxOccurs="unbounded"> <xsd:element ref="Book" /> <xsd:element ref="Magazine" /> </xsd:choice> </xsd:complexType> <xsd:element name="Publication" abstract="true" type="Publication" /> <xsd:element name="Book" type="Book"/> <xsd:element name="Magazine" type=
  • 从 xsd:choice 元素自定义 JAXB 2.0 生成的方法名称(Customize JAXB 2.0 generated method names from a xsd:choice element)
    问题 我试图弄清楚如何自定义由 JAXB 2.1.12 生成的方法名称。 我有一个史诗般的 XML 模式(不在我的控制范围内),它包含一个带有选择元素的组,其中包含大约 200 个其他元素。 因此,当我生成 JAXB 类时,创建的 get() 方法相当无用 - 它最终类似于“getElement1AndElement2AndElement3()”。 我想将 get() 方法重命名为更好的方法,但我不知道如何做到这一点。 我知道在教程中它描述了通过在元素上使用来自定义类名。 我发现了一篇非常古老的文章(http://onjava.com/pub/a/onjava/2003/12/10/jaxb.html?page=2),它描述了将“名称”属性附加到元素,这似乎成为我需要做的。 不幸的是,我认为该文章引用了 1.x JAXB 版本,并且名称属性在 JAXB 2.0 中的选择元素中不再有效。 那么有人知道如何自定义生成的方法名称吗? 请让我知道示例或任何其他信息是否会有所帮助,或者我正在尝试做的事情是不可能的。 谢谢! 回答1 我已经尝试使用您提供的链接中公开的示例,并且以下 binding.xjb 有效: <jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http:/
  • 在.NET XML反序列化中,如何允许多态使用Array类型?(In .NET XML deserialization, how can I allow polymorphic use of Array types?)
    问题 示例架构: <complexType name="Dog">...</complexType> <complexType name="Cat">...</complexType> <complexType name="ArrayOfDog"> <sequence> <element name="Dog" type="tns:Dog minOccurs="0" maxOccurs="unbounded" /> </sequence> </complexType> <complexType name="Foo"> <sequence> <element name="Bar" type="string"/> <element name="Baz" type="anyType"/> </sequence> </complexType> 通过.NET的wsdl.exe运行此命令会生成类似于以下内容的代码: [System.Xml.Serialization.XmlIncludeAttribute(typeof(Dog[]))] public partial class Dog { ... } public partial class Cat { ... } public partial class Foo { private string barField; private
  • XJC Java 类生成非无界元素(XJC Java class generation for <xs:choice> element which is not unbounded)
    问题 在昨天的这个类似问题之后,我有另一个关于 XML 模式和 XJC 绑定中的继承的问题。 给定以下选择元素,使 Book 和 Journal 具有共同的父类型( Publication )。 <xsd:choice > <xsd:element name="Book" type="Book" /> <xsd:element name="Journal" type="Journal" /> </xsd:choice> 生成的 Java 类属性如下: private Book book; private Journal journal; 由于<xsd:choice>意味着可能有我更喜欢的Book或Journal private Publication bookOrJournal; 如果我通过在选择元素中设置maxOccurs="unbounded"来获得出版物列表,它将以这种方式工作,我会得到 private List<Publication> bookOrJournal; 如何使用非收藏属性实现这一目标? 回答1 您可以使用以下 XJC 绑定来实现此目的。 <xs:complexType name="myClass"> <xs:sequence> <xs:choice> <xs:annotation> <xs:appinfo> <jaxb:property name=
  • 如何使生成的类包含XML Schema文档中的Javadoc(How to make generated classes contain Javadoc from XML Schema documentation)
    问题 我目前正在使用在大多数类型和元素上具有<xsd:annotation> / <xsd:documentation>的XML模式。 当我从此XML模式生成Java Bean时,这些Bean的Javadoc仅包含一些有关类型/元素的允许内容的通用生成信息。 我想在相关位置查看<xsd:documentation>标记的内容(例如,complextType的该标记的内容应显示在代表该complexType的类的Javadoc中)。 有什么办法可以做到这一点? 编辑:此XML Schema将在具有JAX-WS的WSDL中使用,因此此标记也可能适用。 编辑2 :我已经读过<jxb:javadoc> 。 据我了解,我可以在一个单独的JAXB绑定文件中或直接在XML Schema中指定它。 那几乎可以解决我的问题。 但是我宁愿使用现有的<xsd:documentation>标记,因为Javadoc不是文档的主要目标(它主要是关于数据结构的信息,而不是有关从中生成的Java Bean的信息),并且允许使用非JAXB工具也可以访问信息。 在<jxb:javadoc>和xsd:documentation> “感觉”是错误的,因为我没有充分的理由来复制数据(和工作)。 编辑3 :感谢Pascal的回答,我意识到我已经有了一半解决方案: complexType的<xsd:documentation
  • XSD、泛型和 C# 类的困境(Dilemma with XSD, Generics and C# Classes)
    问题 我有以下简单的 XSD 文件: <xs:element name="Search" type="SearchObject"/> <xs:complexType name="SearchObject"> <xs:choice> <xs:element name="Simple" type="SimpleSearch"/> <xs:element name="Extended" type="ExtendedSearch"/> </xs:choice> </xs:complexType> <xs:complexType name="SimpleSearch"> <xs:sequence> <xs:element name="FirstName" type="xs:string"/> <xs:element name="LastName" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="ExtendedSearch"> <xs:sequence> <xs:element name="FirstName" type="xs:string"/> <xs:element name="LastName" type="xs:string"/> <xs:element name="Age"