XML针对生成的XSD校验失败,无法解析ns4:PayCardDetails问题咨询
问题原因
XML中<Payment>节点通过xsi:type="ns4:PayCardDetails"显式指定了该元素的类型为urn:main:types/common/payment_v1命名空间下的PayCardDetails命名类型,但自动生成的XSD存在两个核心问题:
- 未声明
urn:main:types/common/payment_v1命名空间,也没有定义PayCardDetails类型 - 自动推断的字段类型错误:如
Card_type在XML中是字符串值xyz,但生成的XSD指定为数字类型xs:unsignedByte,后续也会触发类型不匹配错误
解决方法
修改XSD,补充命名空间声明、显式定义PayCardDetails类型,修正错误的字段类型即可,示例如下:
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:main:types/common/payment_v1" xmlns:ns4="urn:main:types/common/payment_v1" elementFormDefault="qualified"> <!-- 单独定义PayCardDetails命名类型,对应XML中xsi:type的声明 --> <xs:complexType name="PayCardDetails"> <xs:sequence> <xs:element minOccurs="0" name="Card_number" type="xs:unsignedLong" /> <!-- 修正类型:Card_type是字符串,不是无符号字节 --> <xs:element minOccurs="0" name="Card_type" type="xs:string" /> <xs:element minOccurs="0" name="Card_end"> <xs:complexType> <xs:attribute name="end" type="xs:date" use="optional" /> </xs:complexType> </xs:element> <xs:element minOccurs="0" name="Card_name" type="xs:string" /> <xs:element minOccurs="0" name="Card_code" type="xs:unsignedByte" /> </xs:sequence> </xs:complexType> <!-- 定义Payment元素,类型指向上面声明的PayCardDetails --> <xs:element minOccurs="0" name="Payment" type="ns4:PayCardDetails" /> </xs:schema>
可选调整项
- 可以根据实际业务规则调整各字段的
minOccurs属性,必填字段设为1即可 - 如果
Card_code可能出现大于255的数值,可以把类型从xs:unsignedByte改为xs:unsignedInt或者xs:string
内容的提问来源于stack exchange,提问作者user1555190
相关产品推荐
相关产品推荐

