【问题标题】:How to programmatically generate .NET classes from XSD? (Like xsd.exe do)如何以编程方式从 XSD 生成 .NET 类? (就像 xsd.exe 一样)
【发布时间】:2010-11-07 06:48:54
【问题描述】:

我想以 xsd.exe 方式而不是 linqtoxsd 方式生成类。

【问题讨论】:

  • 为什么不使用 xsd.exe?
  • 也许不想,关你什么事?
  • @leppie:它将阐明要求。例如,他是否有不调用外部程序的限制?不使用 Microsoft 程序?
  • @leppie:最简单的解决方案不就是调用xsd吗?一行代码? (亲吻/你不需要它)
  • 反对 XSD 的原因之一是 STILL 至今不支持 List - 它仍然总是创建 T[],这简直太可怕了。

标签: c# .net xml xsd schema


【解决方案1】:

查看System.Xml.Serialization.XmlCodeExporter 类。

更新(以防 John Saunders 懒得继续阅读)

"Xsd.exe 使用 XmlCodeExporter 来 从 XML Schema 生成类 定义 (XSD) 文档。”

【讨论】:

  • "此 API 支持 .NET Framework 基础结构,不打算直接从您的代码中使用"
  • 我是从1.1开始用的,有问题吗?
  • “不打算使用”并不意味着“不能使用”;)
  • +1 获取该信息。我一直认为在进程中启动 xsd.exe 是唯一的解决方案。 :-)
  • @leppie,Thomas:这取决于这段代码对你是否重要。 “基础设施”代码如有更改,恕不另行通知。毕竟,从 .net 1.1 开始,他们只告诉过你不要使用它。
【解决方案2】:

试试Xsd2Code

似乎是目前最好的免费/开源工具。

与 VS2010 的良好集成

对我来说效果很好。

【讨论】:

    【解决方案3】:

    您可以使用 Process Class 从您的代码中调用 xsd.exe。我做过一次,它快速而直接。你不需要太无聊:)。

    【讨论】:

      【解决方案4】:

      流程的哪一部分你不知道怎么做?

      您可以将XmlSchema 类的一个或多个实例加载到XmlSchemaSet 中。这将允许您以编程方式检查架构的所有部分以及它可能引用的其他架构。您可以使用此信息生成代码,或者作为稍后需要编译的文本,或者使用 CodeDOM。见Dynamic Source Code Generation and Compilation


      如果您是在 Visual Studio 的上下文中生成代码,那么我建议您通过 T4 模板来执行此操作。见Generating Artifacts By Using Text Templates

      【讨论】:

      • 由于 XML Schema 的复杂性,至少可以说,自己解析它并从中生成类将是一场噩梦。
      • 我不建议你自己解析。使用 XmlSchema.Load 加载单个架构,然后将结果添加到 XmlSchemaSet。将您需要的所有模式添加到该集合中,然后您可以“编译”它以验证它并修复交叉引用;最后,您可以遍历结构并生成代码。
      • 对不起,我的意思是走(而不是解析)结构。我不知道您对 SOM 或 XML Schema 规范有多熟悉。但是从 XML Schema 生成代码是一项艰巨且相当复杂的任务(即使考虑到您应该只支持 XML Schema 规范的一个子集。实际上可以直接转换为代码)这就是为什么我更喜欢重新使用代码。
      • 我对 SOM 非常熟悉,因此我会选择基于 SOM 驱动的 T4 模板生成代码。
      猜你喜欢
      • 1970-01-01
      • 2011-05-18
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多