代码之家  ›  专栏  ›  技术社区  ›  ewall

可以将多个XSD文件组合成一个的工具?

  •  20
  • ewall  · 技术社区  · 14 年前

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

    但是,我在生成的输出文件(其中xsd.exe将包含的每个xsd的名称组合在一起)中一直遇到window cmd的字符限制:“指定的路径、文件名或两者都太长。完全限定的文件名必须少于260个字符,目录名必须少于248个字符。“

    长话短说,看来我能把所有这些验证和生成在一起的唯一方法就是将所有XSD(取消引用includes/imports,但xsd.exe并不能解析schemaLocation)合并为一个大的XSD。

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

    5 回复  |  直到 7 年前
        1
  •  20
  •   kevindaub    11 年前

    您可以做的是创建另一个名为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,生成类文件:)

        2
  •  7
  •   Petru Gardea    7 年前

    对于将来的引用,另一个为XML模式重构设计的工具是 QTAssistant -我和它有联系。

    澄清你的问题,希望能帮助别人…有一件事是不能按照您的请求实现,即不能取消引用导入:一个XSD文件与一个XML架构相关联,该架构不允许每个xsd:schema元素有多个目标命名空间。

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

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

    如果您有一个在65个XSD文件中编写的完全定义的XML模式集,比如说10个名称空间,那么重新分解的XML模式文件的“规范”集必须至少包含10个文件。

        3
  •  5
  •   Community CDub    13 年前

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

    其他消息来源说 Oxygen XML Editor XMLSpy 也可以,但我不知道怎么做。

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

    在我的例子中,我通过另一个循环路径解决了这个问题:缩短每个输入xsd的名称,使xsd.exe的组合输出名称(您不能选择)低于260个字符的限制。

        4
  •  3
  •   TheKingpin    13 年前

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

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

    1. 打开你所说的.xsd…
    2. 名为(模式设计)的菜单项具有名为(扁平模式)的项。
    3. 点击它。(它将询问您在哪里保存新文件…我只是创建一个输出文件夹或其他东西。

    它似乎工作得很好。

        5
  •  3
  •   Syed Musa Tariq    10 年前

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