【问题标题】:Validation error xsd schema with nested complex types具有嵌套复杂类型的验证错误 xsd 架构
【发布时间】:2015-12-10 12:07:15
【问题描述】:

验证过程中出现的错误是:

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 架构中遗漏了什么?

【问题讨论】:

  • 您的问题看起来错误或不完整 - 您的错误消息涉及 Details 元素,但您的架构和 XML 未显示任何 Details 元素。那应该是PersonDetails 元素吗?
  • @MattJones Details 元素是 Person 中 xs:element 的名称。 Details 是 PersonDetails 的类型
  • 啊,是的,你是对的。我没有在脑海中解析那一点!

标签: xml xsd xsd-validation xml-validation


【解决方案1】:

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

现在它已经启动并正在处理此更改:

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

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

提醒自己,在发布到 Stack Overflow 之前检查一下是否有问题..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2010-11-15
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多