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的新文件,其中包含其中的所有模式名称,然后诀窍是使用.\作为前缀命名最后一个模式文件.
<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"并获得生成的类文件:)
对于将来的参考,另一个为XML Schema重构设计的工具是QTAssistant - 我与它相关联.
澄清你的问题并希望帮助其他人......根据你的要求,无法实现的一件事是无法取消引用导入:XSD文件与一个XML Schema关联,每个XML Schema不允许多个目标命名空间xsd:schema元素.
xsd:include可以是"内联"; 由于文件必须具有相同的目标命名空间或匹配"变色龙"命名空间设计方法,因此可以将文件的内容合并到另一个中.
xsd:import不能"内联"...除非您重构目标名称空间.但是,这不会产生等效的模式集.
如果你有在全球65个XSD文件撰写了完全定义的XML Schema集,与比如说10个命名空间,"规范"一套再因式分解的XML架构文件必须有它的至少10个文件.
我确实找到了一个工具(基本上是一个XSLT)来做这种事情:Paul Kiel的XML Schema Flattener,但我还没有得到它.
其他消息来源说像Oxygen XML Editor和XMLSpy这样的工具也可以做到,但我无法弄清楚如何.
- > http://www.oxygenxml.com/xml_schema_editor.html#xml_schema_flatten
在我的情况下,我通过另一条迂回路线解决了这个问题:缩短每个输入XSD的名称,以便XSD.EXE的组合输出名称 - 您无法选择 - 低于260个字符的限制.