Validation BizTalk生成的XSD无法验证其派生的XML
我从另一个系统得到了一个XML响应,但没有XSD,所以我使用createschema选项生成了一个响应 然后,我将XSD添加到BizTalk 2006 R2项目中,并将其“输入实例文件名”属性设置为原始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
错误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,我的单元测试非常有用。非常感谢你的帮助