【问题标题】:How to create XSD file programmatically in C#?如何在 C# 中以编程方式创建 XSD 文件?
【发布时间】:2012-05-11 19:09:51
【问题描述】:

我有一个 xml 文件(我在 c# 中使用 XmlDocument 创建),现在我必须在 C# 中以编程方式创建与之对应的 xsd 文件...我该怎么做? 我可以使用相同的类来创建 xml 文件吗?还是我应该使用任何其他(xsd 相关)类?

【问题讨论】:

  • 应该注意,XML 文档没有构建描述文档的 XSD 所需的元数据。您的 XML 文档是 XSD,还是您希望使用 XSD 描述/定义的文档?
  • 这是一个XML文档,想用XSD文件来描述

标签: c# xml xsd


【解决方案1】:

如果您只想从 XML 文件生成 XSD 文件,那么您可以使用 Microsoft 的 XSD.EXE,它包含在 Visual Studio 中。

要使用它,请打开 Visual Studio 命令提示符。然后输入 xsd file.xml 为该 XML 文件生成架构。

您也可以使用该工具为您的 XML 输入生成类,只需传入 /classes 参数即可。

【讨论】:

    【解决方案2】:

    虽然 XML Schema 文件是一个 XML 文件,但它有一些东西会使“手工”操作变得很麻烦;有人可能会说,为什么要使用 DOM API 而不是使用 XSD.exe 或 XSD2Code.exe 生成的 C# 类来编写 XML?或者稍微推一下……有点类似于有人说 C# 语句最终会变成 IL 程序集;为什么不写 IL 呢?

    Schema Object Model API 提供了另一种选择;在 .NET 中,它是 System.Xml.Schema 命名空间。

    看看code example found here on MSDN。它将为您提供另一种方法的想法。它提供了一个对程序员友好的 API 来生成 XSD,而不是处理实际的 XML。

    【讨论】:

      【解决方案3】:

      XSD 只是另一个 XML 类型的文件。无论您使用什么来创建 XML 文件,都将有助于创建 XSD 文件;您只需要知道要在文件中放入哪些标签/属性...

      【讨论】:

      • XSD 代表 ahem XML 模式定义。那是什么意思?这意味着它是用有效的 XML 编写的。这意味着任何 XML 编写器都应该能够毫无问题地创建一个。
      • 感谢您的回答...这正是我所做的,但问题是 xsd 元素的前缀没有生成,尽管我在 XmlDocument CreateElement 方法中编写了它
      • @shady 如果您有代码尝试过但无法正常工作,发布相关部分可能会有所帮助,以便我们为您提供帮助
      • @shady 是的,如果您尝试过编写 xml 文档的方法并没有达到您的预期;请张贴你所做的和你期望它做的......
      【解决方案4】:

      解决方案: 我最初发布了回复,但 Stack Overflow 我编辑了我的回复,所以这里是编辑。我建议的原始工具是另一种方式。然后我做了一些研究,有人推荐了一个名为 MyGenerations 或类似的工具。这需要安装、下载模板和大量工作,太复杂了。然后我做了一些更多的研究,并在 CodePage 上遇到了一个相当漂亮的解决方案,但是该解决方案有效,因为我对其进行了测试,需要进行一些修改。该代码称为 XmlToXsd,其 URL 为:

      http://www.codeproject.com/Articles/133570/XmlToXsd-A-Better-Schema-Generator.

      程序部分有两个错误。首先,它将 XSD 保存到可执行文件的根目录。不用担心,exe 只是调用位于一个 CS 文件中的方法。只需在项目中包含该 CS 文件并使用给定的行调用,只需将路径更改为与 XML 相同的文件夹即可。此外,作者使用垃圾 URL 的目标命名空间。 DevExpress 对不存在的 URL 提出投诉。通过一些努力,我将目标 URL 替换为 null。在随附的 CS 文件中,我必须进行一些更改。其他人的理解比我能修改到他/她的内心程度。我只是通过告诉他们我做了什么来帮助别人,所以没有静态的回复。

      变更一:在“target = XNamespace.Get(targetNamespace);”之前为目标命名空间添加一个 if 语句,仅在不为 null 时才加载。

      更改 2:我为返回添加了另一个 if 语句。 null返回,原返回的一个副本修改如下:

      2.1:核对目标命名空间属性项。 2.2:在replace调用之后,再添加一个“.Replace("xmlns=\"null\"", null))”的replace调用。 2.3:返回前,需要加大括号,设置target="null"。

      生成的文件现在看起来完全有效并以编程方式创建。

      是的,可以手动使用 XSD.exe,但我需要一种程序化的对话方式。

      原帖: 我有同样的问题,不一定是程序化的。 XSD 实用程序确实可以完成这项工作。问题是 Microsoft 没有随 Visual Studio 2012 Professional 分发 xsd.exe。我搜索了我的硬盘驱动器并找到了带有 Microsoft SDK 的实用程序,我的磁盘上的路径为“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\xsd.exe”。

      我必须转到 XML 文件所在的文件夹并从命令框(不是在 Visual Studio 中)执行 XSD 实用程序,最后得到 XSD 文件。

      以编程方式执行此任务的一种方法是从代码中调用 XSD,但这意味着分发 XSD。

      我找到了这个组件,但从未使用它来完成这项工作。签出:http://xsd2code.codeplex.com/

      【讨论】:

        【解决方案5】:

        试试这个:

        string xmlFilePath = @"myxmlfile.xml";
        string xsdOutputPath = @"myxmlfile.xsd";
        
        DataSet ds = new DataSet();
        
        System.IO.FileStream fsReadXml = new System.IO.FileStream(xmlFilePath, System.IO.FileMode.Open);
        ds.ReadXml(fsReadXml);
        
        ds.WriteXmlSchema(xsdOutputPath);
        

        如果来自 xDocument:

        DataSet ds = new DataSet();
        ds.ReadXml(YourXDocument.CreateReader());
        ds.WriteXmlSchema(xsdOutputPath);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-02
          • 2012-02-07
          • 1970-01-01
          • 2017-07-06
          • 1970-01-01
          • 1970-01-01
          • 2012-07-30
          • 1970-01-01
          相关资源
          最近更新 更多