【问题标题】:How to declare optional date field in XSD如何在 XSD 中声明可选日期字段
【发布时间】:2015-11-20 06:29:04
【问题描述】:

我使用 XSD 验证传入的 XML 元素。 XSD 文件

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.rg/2001/XMLSchema"
 xmlns:tns="http://xxxy/ervices/V0" 
targetNamespace="http://xxxy/ervices/V" elementFormDefault="qualified"
attributeFormDefault="unqualified" >

<xs:complexType name="FailType"> 
<xs:sequence>
<xs:element name="ConDt" type="xs:date" minOccurs="0" maxOccurs="1"     nillable="true"/>
  <xs:element name="PreEn" type="xs:string" minOccurs="1" maxOccurs="1"/>
 </xs:sequence>
 </xs:complexType>
 </xs:schema>

我的 XML 文件

<Pat xmlns="http://xxxy/ervices/V">
<ConDt></ConDt>
</Pat>

我得到元素无效 - 根据其数据类型“http://org/2001/XMLSchema:date”,值 '' 无效 - 字符串 '' 不是有效的日期值。

【问题讨论】:

    标签: asp.net xml


    【解决方案1】:

    指定 nillable="true" 允许您的实例包含

    <ConDt xsi:nil="true"></ConDt>
    

    但它不允许你写

    <ConDt></ConDt>
    

    (请不要问我他们在想什么……)

    如果你想允许

    <ConDt></ConDt>
    

    那么两种可能的方法是

    1. 将其定义为允许 xs:date 或 零长度字符串,或

    2. (我的首选方法)将其定义为列表类型:xs:date 值列表,maxLength="1"。

    【讨论】:

    • 感谢您的回复。我必须在 XSD 文件中写下这一行 吗?
    • 该元素出现在实例文档中,而不是架构中。
    • Michel 你能指导我在哪里写列表类型吗?我在复杂类型中使用元素。
    • 您当前声明 ConDt 的类型为 xs:date。将其声明为“optionalDate”类型并包含“optionalDate”的全局类型声明。将此定义为另一种类型“listOfDates”的限制(具有方面 maxLength="1"),它是 itemType="xs:date" 的列表类型。
    【解决方案2】:

    非常感谢迈克尔。我真的很感谢你的帮助。

    下面的代码将允许我们声明可选的日期字段。

       <xs:element name="ConDt" maxOccurs="unbounded" minOccurs="0">
        <xs:simpleType>
          <xs:union>
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:minLength value="0" />
                <xs:maxLength value="0" />
              </xs:restriction>
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="xs:date" />
            </xs:simpleType>
          </xs:union>
        </xs:simpleType>
      </xs:element>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 2021-09-23
      相关资源
      最近更新 更多