我需要为大约65个XSD文件创建XML序列化程序类,为此我使用Microsoft的XSD.EXE来生成C#代码......
但是,我一直在生成的输出文件中运行Window CMD的字符限制(其中XSD.EXE结合了包含的每个XSD的名称):“指定的路径,文件名或两者都太长。完全限定文件名必须少于260个字符,目录名必须少于248个字符。“
总而言之,似乎我可以将所有这些一起验证和生成的唯一方法是合并所有XSD(取消引用包含/导入,XSD.EXE不会无论如何将schemaLocation解析成一个大的。
请告诉我,有一个工具可以做到这一点......
答案 0 :(得分:20)
您可以做的是创建另一个名为file.xsd的新文件,其中包含其中的所有模式名称,然后诀窍是将最后一个模式文件命名为。\ as prefix。
<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”并获得生成的类文件:)
答案 1 :(得分:7)
对于将来的参考,另一个为XML Schema重构设计的工具是QTAssistant - 我与它相关联。
澄清你的问题并希望帮助其他人......根据你的要求无法实现的一件事就是无法取消引用导入:XSD文件与一个不允许多个XML Schema的XML Schema相关联每个xsd:schema元素的目标命名空间。
xsd:include可以是“内联”;由于文件必须具有相同的目标命名空间或匹配“变色龙”命名空间设计方法,因此可以将文件的内容合并到另一个中。
xsd:import不能“内联”...除非你重构目标名称空间。但是,这不会产生等效的模式集。
如果你有65个XSD文件创建一个完全定义的XML Schema集,比如10个名称空间,那么“规范”的重构XML Schema文件集必须至少包含10个文件。
答案 2 :(得分:5)
我确实找到了一个工具(基本上是一个XSLT)来做这种事情:Paul Kiel的XML Schema Flattener,但我还没有得到它。
其他消息来源说Oxygen XML Editor和XMLSpy等工具也可以这样做,但我无法弄明白。
- &GT; http://www.oxygenxml.com/xml_schema_editor.html#xml_schema_flatten
在我的情况下,我通过另一条迂回路线解决了问题:缩短每个输入XSD的名称,以便XSD.EXE的组合输出名称 - 您无法选择 - 低于260个字符的限制。
答案 3 :(得分:3)
我刚开始使用Altova XML Spy(1天)
将.xsd架构展平为一个文档...仍然会验证,并提供对eclipse中单击的引用...
似乎工作正常。
答案 4 :(得分:3)
只需添加。\前缀和最后一个.xsd(架构)文件的名称,并用逗号括起来,例如&#34;。\ last.xsd&#34;。将使用最后一个模式文件名生成输出类。