Validation BizTalk生成的XSD无法验证其派生的XML

Validation BizTalk生成的XSD无法验证其派生的XML,validation,xsd,biztalk,Validation,Xsd,Biztalk,我从另一个系统得到了一个XML响应,但没有XSD,所以我使用createschema选项生成了一个响应 然后,我将XSD添加到BizTalk 2006 R2项目中,并将其“输入实例文件名”属性设置为原始XML消息 尝试了“验证实例”选项,但失败了???,出现了如下错误。。。 错误BEC2004:xsi:type属性值“”对于元素“”无效,这可能是因为它不是从架构中的类型有效派生的类型,或者因为它阻止了xsi:type派生 用于生成XSD的XML怎么会失败呢 我的XML示例是 <?xml v

我从另一个系统得到了一个XML响应,但没有XSD,所以我使用createschema选项生成了一个响应

然后,我将XSD添加到BizTalk 2006 R2项目中,并将其“输入实例文件名”属性设置为原始XML消息

尝试了“验证实例”选项,但失败了???,出现了如下错误。。。
错误BEC2004:xsi:type属性值“”对于元素“”无效,这可能是因为它不是从架构中的类型有效派生的类型,或者因为它阻止了xsi:type派生

用于生成XSD的XML怎么会失败呢

我的XML示例是

<?xml version="1.0" encoding="utf-8"?>
<ImportIndexDocumentResponse 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://www.aniteps.com/xml/schemas/awm/images4">
  <HasErrors>false</HasErrors>
  <NumberOfErrors xsi:type="xsd:int">0</NumberOfErrors>
  <ErrorDescription xsi:type="xsd:string">No exception ocurred.</ErrorDescription>
  <ErrorNumber xsi:type="xsd:int">0</ErrorNumber>
  <FailedItems>
    <Item>
      <OriginalDataString xsi:type="xsd:string" />
      <ErrorDescription xsi:type="xsd:string" />
    </Item>
  </FailedItems>
  <UniqueDocumentReferences>
    <UniqueDocumentReference>FA40FE</UniqueDocumentReference>
    <UniqueDocumentReference>U55922</UniqueDocumentReference>
  </UniqueDocumentReferences>
</ImportIndexDocumentResponse>

假的
0
没有例外。
0
FA40FE
U55922
BizTalk/Visual Studio 2005将生成

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns:xs="http://www.w3.org/2001/XMLSchema" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            attributeFormDefault="unqualified" 
            elementFormDefault="qualified" 
            targetNamespace="http://www.aniteps.com/xml/schemas/awm/images4">
  <xs:element name="ImportIndexDocumentResponse">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="HasErrors" type="xs:boolean" />
        <xs:element name="NumberOfErrors" type="xs:unsignedByte" />
        <xs:element name="ErrorDescription" type="xs:string" />
        <xs:element name="ErrorNumber" type="xs:unsignedByte" />
        <xs:element name="FailedItems">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Item">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="OriginalDataString" />
                    <xs:element name="ErrorDescription" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="UniqueDocumentReferences">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="UniqueDocumentReference" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xsd:schema>

XSD生成器相当愚蠢,没有注意到示例实例文档包含类型注释(xsi:type属性)。所以它决定应该包含无符号字节,而不是有符号整数,正如类型注释所说的


然后发生的事情是,验证器变得混乱,因为元素有两个不同的类型定义,所以它应该相信谁?您可以尝试更改模式,使类型定义与xsi:type重写匹配,这可能会有所帮助。

XSD生成器相当愚蠢,并且没有注意到示例实例文档包含类型注释(xsi:type属性)。所以它决定应该包含无符号字节,而不是有符号整数,正如类型注释所说的


然后发生的事情是,验证器变得混乱,因为元素有两个不同的类型定义,所以它应该相信谁?您可以尝试更改模式,使类型定义与xsi:type覆盖匹配,这可能会有所帮助。

Spot在Tomas上,更改为xs:int,我的单元测试工作正常。非常感谢Tomas上的帮助点,它改为xs:int,我的单元测试非常有用。非常感谢你的帮助