可以将许多XSD文件合并为一个的工具?

ewa*_*all 20 xsd xml-serialization xsd.exe .net-3.5

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

但是,我一直在生成的输出文件中运行Window CMD的字符限制(其中XSD.EXE结合了所包含的每个XSD的名称):"指定的路径,文件名或两者都太长.完全限定的文件名必须小于260个字符,目录名称必须少于248个字符."

总而言之,似乎我可以将所有这些一起验证和生成的唯一方法是合并所有XSD(取消引用包含/导入,XSD.EXE不解析schemaLocation)无论如何)成一个大的.

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

小智 23

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

File.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>
Run Code Online (Sandbox Code Playgroud)

现在运行命令"xsd.exe /p:file.xsd/classes"并获得生成的类文件:)


Pet*_*dea 7

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

澄清你的问题并希望帮助其他人......根据你的要求,无法实现的一件事是无法取消引用导入:XSD文件与一个XML Schema关联,每个XML Schema不允许多个目标命名空间xsd:schema元素.

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

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

如果你有在全球65个XSD文件撰写了完全定义的XML Schema集,与比如说10个命名空间,"规范"一套再因式分解的XML架构文件必须有它的至少10个文件.


小智 7

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


ewa*_*all 5

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

其他消息来源说像Oxygen XML EditorXMLSpy这样的工具也可以做到,但我无法弄清楚如何.

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

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