xsd.exe没有找到类型声明

时间:2017-11-17 13:52:39

标签: c# xml xsd xsd.exe

我试图从IRS网站上提供的XSD文件生成类文件:

https://www.irs.gov/businesses/corporations/fatca-xml-schemas-and-business-rules-for-form-8966

可从此处下载的架构文档:https://www.irs.gov/pub/fatca/fatcaxml_v2.0.zip

(FATCAXML_v2.0(25KB) - FATCA报告的主要模式。)

zip文件包含4个文档:

  • FatcaXML_v2.0.xsd
  • isofatcatypes_v1.1.xsd
  • oecdtypes_v4.2.xsd
  • stffatcatypes_v2.0.xsd

在第一个文件FatcaXML_v2.0.xsd中,有3个xsd:import节点,它们似乎引用了其他3个xsd文档。

尝试使用针对FatcaXML_v2.0.xsd的xsd.exe生成我的类时,我收到有关未声明类型的多个错误,例如:

Schema validation warning: Type 'urn:oecd:ties:stffatcatypes:v2:StringMax200_Type' is not declared. Line 259, position 5.

但是,我确实在stffatcatypes_v2.0.xsd中看到了此类型的声明(已导入到#39; FatcaXML_v2.0.xsd'的顶部):

<xsd:simpleType name="StringMax200_Type">
  <xsd:annotation>
    <xsd:documentation>Defines a string with maximum length of 200
    </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
        <xsd:minLength value="0"/>
        <xsd:maxLength value="200"/>
    </xsd:restriction>
</xsd:simpleType>

如何让xsd.exe识别这些类型定义?

提前致谢

1 个答案:

答案 0 :(得分:0)

为了让XSD.exe使用

导入“荣誉”模式
<xsd:import namespace="importNamespace" schemaLocation="schema.xsd"/> 

声明,模式需要位于同一文件夹中,您需要在命令行中指定所有模式。它们还应按照从基本模式到父模式的使用顺序进行指定。因此,如果您有一个架构,parent.xsd导入child.xsd,而base.xsd依次导入xsd base.xsd child.xsd parent.xsd [options] ,那么您的命令行需要如下所示

<import schemaLocation

NB 模式可能不需要全部位于同一位置但如果不是,我怀疑相对位置(相对于您运行XSD的位置应该位于主模式的文件夹中) )需要在命令行中为每个模式指定,并且可能应该匹配replacingOccurrences(of:with:)属性,但我目前无法确认这一点。