3

我有一个针对另一个包含共享类型的主 xsd(它们位于同一目录中)。

这是主要的标题:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:tns="XMLSchema_Module.xsd"
      xmlns:cs="XML_Common"
      targetNamespace="XMLSchema_Module.xsd"
      elementFormDefault="qualified">

  <xsd:import schemaLocation="XML_Common.xsd" namespace="XML_Common"/>

这是共享类型 one 的标题:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      targetNamespace="XML_Common"
      elementFormDefault="qualified">

这是我想在主模式的属性中使用的共享类型枚举:

  <xsd:simpleType name="TypesType">
    <xsd:restriction base ="xsd:token">
      <xsd:enumeration value="int"/>

这是主要的参考:

 <xsd:attribute name="Type" type="cs:TypesType"/>

我正在使用 xsd.exe 生成序列化类(作为预构建事件集成在构建过程中)。这些 xsd 是使用 VisualStudio 构建的。

<Exec Command="&quot;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\xsd.exe&quot; XSchemas\XMLSchema_Module.xsd /c /o:SerializationClasses /n:ScenarioManager" /> 

我正在翻译我获得的实际信息:

The type XML_Common:TypesType is not declared or is not a simple type.

这似乎是一个导入问题,但我不知道如何解决它。

4

2 回答 2

6

我的错,似乎 xsd.exe 无法解析架构导入。从这篇文章

现在类型已在另一个文件中定义,如果您尝试创建请求 XML,xsd.exe 将生成此错误:C:\Solution\Project>xsd.exe Request.xsd /c 架构验证警告:类型' http://www.Example.com/Types:Meeting ' 未声明。警告:无法验证架构。类生成可能会失败或可能产生不正确的结果。错误:为架构“C:\Solution\Projects\Request”生成类时出错。

  • 缺少数据类型“ http://www.Example.com/Types:Meeting ”。如果您需要更多帮助,请输入“xsd /?”。这是因为 xsd.exe 不使用 schemaLocation 提示来查找导入的架构。您必须将其作为参数包含在内。在您的 xsd.exe 调用中:C:\Solution\Project>xsd.exe Types.xsd Request.xsd /c
于 2013-09-02T08:38:11.970 回答
2

应该强调的是,尽管 LB40 的回答持悲观态度,但它的最后一句话产生了解决方案:在您的 xsd.exe 调用中,您必须在引用 xsd之前包含引用的 xsd 作为参数:

C:\Solution\Project>xsd.exe Types.xsd Request.xsd /c

这将生成一个包含两个模式的类的单个 cs 源文件。

于 2016-09-09T14:50:54.930 回答