【问题标题】:XSD Schema: Make element *List optionalXSD 架构:使元素 *List 可选
【发布时间】:2021-05-19 19:47:26
【问题描述】:

在一些 XML 配置方面确实需要您的帮助。我有一个类似的架构:

<Root ...>
.
.
<xs:complexType name="GlobalDataType">
  <xs:sequence>
    <xs:element name="Other1ELement" minOccurs="0">
    <xs:element name="MyELementList" minOccurs="0" maxOccurs="1">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="MyELement" minOccurs="0" maxOccurs="unbounded">
             <xs:complexType>
                <xs:sequence>
                  <xs:element name="Element1" type="T_Custom" minOccurs="0"/>
                  <xs:element name="Element2" type="T_Custom" minOccurs="0"/>   
                </xs:sequence>
             </xs:complexType>
          </xs:element>
          <xs:element name="Element1Visible" type="xs:boolean" default="true" minOccurs="0"/>
          <xs:element name="Element2Visible" type="xs:boolean" default="true" minOccurs="0"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <xs:element name="Other2ELement" minOccurs="0">
  </xs:sequence>
</xs:complexType>
.
.

对我来说一切正常,除了符合:name="MyELementList" minOccurs="0" 我的验证器抛出一个错误,这个列表应该在提供的 .xml 文件中,比如&lt;MyELementList/&gt;,不管我为这个元素设置了minOccurs="0"。对于嵌套元素,一切正常。

【问题讨论】:

  • 您发布了一个断章取义的 XSD。 MyElementList 是根元素吗?请edit您的帖子并包含一个最小但完整的 XSD 和显示问题的示例 XML。

标签: xml xsd xml-parsing schema elementtree


【解决方案1】:

复杂类型定义了一个内容模型,这就是你说特定元素是否可选的地方。可选性是元素使用位置的属性,而不是元素本身的属性。所以 minOccurs 只与在复杂类型中声明的元素相关 - 从技术上讲,它是元素粒子的属性,而不是元素声明的属性。

【讨论】:

  • 谢谢!我添加了更多级别的元素,请您再看一遍。我的 MyELementList 也是复杂类型的一部分。说真的是不是意味着我不能在这种结构中让它成为可选的? MyELementList 存储在复杂类型 GlobalDataType 中
  • @Reni21:您还没有添加 minimal reproducible example 来证明您的问题。在你这样做之前,我们只能猜测你有一个概念上的误解(正如 Michael Kay 在这里所做的那样),或者还有另一个 MyElementList 使用未指定 minOccurs="0",或者错误来了来自实际的 XSD 处理器,但来自另一个 XML 应用程序等。如果您需要进一步的帮助,请创建一个真正的 minimal reproducible example。让我们猜测是徒劳的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多