验证错误xsd架构与嵌套复杂类型

时间:2015-12-10 12:07:16

标签: xml xsd xsd-validation xml-validation

验证期间发生的错误是:

The element 'Details' in namespace 
'<-namespace->' has incomplete content. List of possible elements expected: 
'PersonAddress' in namespace '<-namespace->'.

架构如下(为了便于阅读,删除了大部分内容):

<xs:complexType name="Person">
    <xs:all>            
        <xs:element minOccurs="1" maxOccurs="1" name="Details" type="PersonDetails" />
    </xs:all>
</xs:complexType>

<xs:complexType name="PersonDetails">
    <xs:all>        
        <xs:element minOccurs="1" maxOccurs="1" nillable="true" name="PersonAddress" type="PersonAddress" />
    </xs:all>
</xs:complexType>

<xs:complexType name="PersonAddress">
    <xs:all>
          <xs:element minOccurs="1" maxOccurs="1" name="Street" type="xs:string" />
          <xs:element minOccurs="1" maxOccurs="1" nillable="true" name="ZipCode" type="xs:int" />         
    </xs:all>
</xs:complexType>

当我使用Schema和我的DTO序列化到XML时:我将PersonAddress映射到null或反映'PersonAddress'的对象

我除了我的最终xml之外,结果如下:

</PersonDetails>
     <PersonAddress xsi:nil="true" />
</PersonDetails>

相反,我在针对xsd架构的验证过程中遇到了错误,如本文首先所述。

当我在PersonDetails中的PersonAddress上将minOccurs设置为零时,它工作正常:

<xs:element minOccurs="0" maxOccurs="1" nillable="true" name="PersonAddress" type="PersonAddress" />

但问题是,当我将映射对象设置为'null'时,该元素根本不会显示。它不存在。

我在xsd架构中遗漏了什么?

1 个答案:

答案 0 :(得分:0)

好的,所以我在DTO犯了错误。

现在它已经开始并正在进行这项改变:

[XmlElement(IsNullable = true)]
public PersonAddress PersonAddress { get; set; }

忘记将IsNullable标记添加到DTO属性。

自我注意,在发布到Stack Overflow之前检查mindfuck ..