XSD验证失败提示属性未声明,Visual Studio生成XSD文件异常求助
问题解决方案
根本原因
你遇到的「属性未声明」报错是Visual Studio自动生成XSD时的两个常见问题导致的:
- 导入外部命名空间时未指定对应的schema文件路径,验证时找不到
dt:dt属性的定义 - 自动生成的dt命名空间XSD规则过于简单,和客户提供的正式
dt.xsd规则不匹配
分步修复操作
1. 替换dt命名空间定义文件
删除Visual Studio自动生成的dt命名空间XSD文件,将客户提供的dt.xsd文件保存到和主XSD相同的目录下,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema targetNamespace="http://www.intershop.com/xml/ns/enfinity/6.5/core/impex-dt" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:attribute name="dt"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="int" /> <xsd:enumeration value="double" /> <xsd:enumeration value="string" /> <xsd:enumeration value="long" /> <xsd:enumeration value="boolean" /> <xsd:enumeration value="date" /> <xsd:enumeration value="decimal" /> <xsd:enumeration value="money" /> <xsd:enumeration value="quantity" /> <xsd:enumeration value="text" /> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:schema>
2. 修改主XSD的导入配置
打开你生成的第二个主XSD文件,找到两个<xs:import>节点,补充schemaLocation属性指定依赖文件路径:
<!-- 导入xml标准命名空间,可下载标准xml.xsd放到同目录,也可省略如果VS已内置识别 --> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd" /> <!-- 导入dt命名空间,指定你刚才保存的dt.xsd路径 --> <xs:import namespace="http://www.intershop.com/xml/ns/enfinity/6.5/core/impex-dt" schemaLocation="dt.xsd" />
3. 修正自动推断的错误类型(可选但建议)
Visual Studio自动生成XSD时会把纯数字的sku推断为xs:unsignedInt类型,若后续sku包含字母/特殊字符会校验失败,建议将所有sku属性的类型修改为xs:string:
<!-- 原生成内容 --> <xs:attribute name="sku" type="xs:unsignedInt" use="required" /> <!-- 修改为 --> <xs:attribute name="sku" type="xs:string" use="required" />
4. 验证生效
将主XSD、dt.xsd、xml.xsd(如果使用)和你的业务XML文件放在同一目录下,用Visual Studio打开XML文件,在属性窗口的「架构」选项中勾选对应的主XSD,重新验证即可消除报错。
完成以上操作后你就可以正常使用该XSD创建BizTalk映射文件,实现CSV到目标XML格式的转换。
内容的提问来源于stack exchange,提问作者tommyhmt
相关产品推荐
相关产品推荐

