24

我需要为大约 65 个 XSD 文件创建 XML 序列化程序类,为此我使用 Microsoft 的XSD.EXE来生成 C# 代码...

但是,我在生成的输出文件中一直遇到 Window CMD 的字符限制(其中 XSD.EXE 结合了每个 XSD 的名称):“指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,并且目录名称必须少于 248 个字符。”

长话短说,似乎我可以让所有这些一起验证和生成的唯一方法是,如果我可以合并所有 XSD(取消引用包含/导入,XSD.EXE 不能解析 schemaLocation无论如何)成一个大的。

请告诉我有一个工具可以做到这一点......

4

5 回答 5

30

您可以做的是创建另一个名为 file.xsd 的新文件,其中包含其中的所有模式名称,然后诀窍是使用 .\ 作为前缀命名最后一个模式文件。

文件.xsd

<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
    <generateClasses language='CS' namespace='MyNamespace'>
        <schema>First.xsd</schema>
        <schema>Second.xsd</schema>
        <!-- more schema files here -->
        <schema>.\Third.xsd</schema>
    </generateClasses>
</xsd>

现在运行命令“xsd.exe /p:file.xsd /classes”,你会得到生成的类文件:)

于 2013-04-08T06:10:58.133 回答
13

对于未来的参考,为 XML Schema 重构设计的另一个工具是QTAssistant - 我与它相关联。

为了澄清您的问题并希望对其他人有所帮助...无法按照您的要求实现的一件事是无法取消引用导入:XSD 文件与一个 XML Schema 相关联,该 XML Schema 不允许每个目标命名空间超过一个xsd:架构元素。

xsd:include 可以“内联”;由于文件必须具有相同的目标命名空间或匹配“变色龙”命名空间设计方法,因此可以将文件的内容合并到另一个文件中。

xsd:import 不能“内联”...除非您也重构目标名称空间。但是,这不会产生等效的模式集。

如果您有一个跨 65 个 XSD 文件(例如 10 个命名空间)创作的完全定义的 XML 模式集,那么重构的 XML 模式文件的“规范”集必须至少包含 10 个文件。

于 2011-08-09T18:20:00.287 回答
7

我确实找到了一个工具(基本上是一个 XSLT)来做这种事情:Paul Kiel 的XML Schema Flattener,但我还没有动手。

其他消息来源说,像Oxygen XML EditorXMLSpy这样的工具也可以做到这一点,但我不知道怎么做。

-> http://www.oxygenxml.com/xml_schema_editor.html#xml_schema_flatten

就我而言,我通过另一条迂回路线解决了这个问题:缩短每个输入 XSD 的名称,以便 XSD.EXE 的组合输出名称(您无法选择)低于 260 个字符的限制。

于 2010-10-06T18:14:04.017 回答
7

只需在最后一个 .xsd(schema) 文件的名称中添加 .\ 前缀并将其括在逗号中,例如“.\last.xsd”。将使用最后一个模式文件名生成输出类。

于 2015-01-14T13:36:23.353 回答
4

我刚开始使用 Altova XML Spy(1 天)

将 .xsd 架构展平到一个文档中......这仍然会验证,并提供在 Eclipse 中单击的引用......

  1. 打开您正在谈论的.xsd ...
  2. 名为 (Schema Design) 的菜单项有一个名为 (Flatten Schema) 的项目。
  3. 点击它。(它会问你在哪里保存新文件......我只是创建一个输出文件夹或其他东西。

它似乎工作得很好。

于 2011-10-21T22:07:24.750 回答