簡體   English   中英

設置nillable = true並在XML文檔中使用默認屬性是否有效?

[英]Is it valid to set nillable=true and use the default property in an XML document?

使用C#和.Net 4.0

我有一個生成的架構,如下所示:

<xsd:element name="EstimatedDate" minOccurs="0" nillable="true" default="1900-01-01T00:00:00">
  <xsd:complexType>
       <xsd:simpleContent>
           <xsd:extension base="xsd:dateTime">
                <xsd:attribute name="origVal" type="xsd:dateTime" use="optional" />
           </xsd:extension>
       </xsd:simpleContent>
  </xsd:complexType>

當我使用null值序列化對象時,我得到:

<EstimatedDate xsi:nil="true" />

但我得到一個反序列化:“當屬性為'xsi:nil'並且值為'true'時,必須沒有固定值。”

當我查看XML規范時,我沒有看到nillable和default屬性是互斥的,但是我的其他dateTime XML類型是可以為空但沒有默認屬性正常工作。

我認為這可能是XML Schema規范中令人困惑的領域之一(有趣的是,即使1.1規范也只是不同於默認和固定組合); 如果你認為元素的默認值在元素存在且空的時候應用 ,並且nilled元素必須沒有任何內容,那么混淆是有意義的......哪一個是:null或默認值? 換句話說,當兩個條件都存在時,哪一個優先? 我想解串器有點在那里尋求幫助......

錯誤消息描述了規范中存在的約束:驗證規則:元素本地有效(元素)子句3.3.2表示當xsi:nil = true時,必須沒有固定值。 但是,據我所知,沒有禁止默認值,因此您的架構處理器似乎過於急於查找錯誤。

我認為你的模式的正確行為是:如果元素為空並且xsi:nil不存在或為false,則使用默認值; 如果元素為空且xsi:nil為true,則保持原樣。

(您可以嘗試讓Microsoft解決此問題,或者您可以嘗試切換到Saxon ...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM