多个XSD模式文件转换为C#类

50

如何从多个XSD模式文件中生成C#类是最佳方式?

一些XSD模式文件可能与其他模式有依赖关系,我正在尝试避免生成重复的C#类。

2个回答

65

使用XSD.EXE程序,但在同一命令行上传递所有模式。

例如:

> xsd /c qbxmltypes130.xsd QBUqbxmlops130.xsd QBUqbxmlso130.xsd QBUqbxml130.xsd

将会生成一个名为:

qbxmltypes130_QBUqbxmlops130_QBUqbxmlso130_QBUqbxml130.cs
在这个案例中,这些是Quickbooks Desktop SDK xsd文件,并且最终的文件依赖于前三个文件中的类型。它本身不会发出,但是与其依赖项一起使用时可以按预期工作。
请注意,有一个/parameters:<file>开关,允许您指定一个命令行参数文件。我记得在一个类似的项目中使用它。 XSD.EXE文档有参数格式。

4
在您的输出文件夹中生成以下命名空间为{your_namespace},使用三个XSD文件{file1}.xsd、{file2}.xsd和{file3}.xsd创建的类,请运行以下命令:"xsd.exe /classes /n:{your_namespace} {file1}.xsd {file2}.xsd {file3}.xsd /out:{your output folder}"。这里只是添加一个示例。 - HelpMatters
现在不需要使用Altova XML Spy从XSD生成具有多个引用的C#类。 - setzamora
1
@vivekp提供的优秀示例的最后一步是:序列中命名的最后一个文件似乎是用于生成类文件名的文件。因此,他的示例将生成类文件{your output folder}{file3}.cs。 - PellucidWombat
1
如果您有循环组引用,则会出现错误并且不会生成类。 - Huseyin Yagli
1
谢谢你的回答。 - Nayan Hodar

36

我个人认为MSDN文档中的示例有些不足。以下是一个参数文件示例,用于解决codemeit所描述的问题:

<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
<generateClasses language='CS' namespace='Namespace.subnamespace'>
    <schema>FirstSchema.xsd</schema>
    <schema>AnotherSchema.xsd</schema>
    <schema>LastSchema.xsd</schema>
</generateClasses>
</xsd>

1
谢谢,@anony_mouse - 我正在寻找一个好的语法例子! - ewall
15
如果你遇到“指定的路径或文件名太长”的错误,请尝试在最后一个文件名前加上“.\”,这样问题就可以解决了。需要注意的是,输出文件将以最后一个文件的名称命名。 - Peter
1
可能值得一提的是,该文件必须具有 .xml 扩展名而不是 .xsd。我曾经为此奋斗了一段时间,我的包含文件超过了50个。但最终成功让它工作了,只需要2秒钟就能生成。 - Donald N. Mafa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接