如何在C#中以编程方式创建XSD文件?

我有一个xml文件(我使用XmlDocument在c#中创建),现在我必须创建xsd文件,它也在C#中以编程方式对应…我怎么能这样做? 我可以使用相同的类来创建xml文件吗? 或者我应该使用其他任何(xsd相关)类?

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

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

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

虽然XML Schema文件是一个XML文件,但它有某些东西可能使得“手动”执行它变得很麻烦; 可以说为什么使用DOM API编写XML而不是使用XSD.exe或XSD2Code.exe生成的C#类? 或者推动它…有点类似于有人说C#语句最终变成IL汇编; 为什么不写IL呢?

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

看一下MSDN上的代码示例 。 它会给你一个另一种方法的想法。 它提供了一个程序员友好的API来生成XSD,而不是处理实际的XML。

XSD只是另一种XML类型的文件。 用于创建XML文件的任何内容对于创建XSD文件也很有用; 你只需要知道你想要放在文件中的标签/属性……

解决方案:我最初发布了一个回复,但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投诉。 通过一些努力,我用null替换了目标URL。 在随附的CS文件中,我不得不进行一些更改。 其他比我更了解的人可以修改他/她的心。 我只是通过告诉他们我做了什么来帮助别人,所以没有静态回来。

更改1:在“target = XNamespace.Get(targetNamespace);”之前 如果目标命名空间不为null,则仅添加if语句。

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

2.1:Nuke targetnamespace属性项。 2.2:在替换调用之后,添加另一个替换调用“.Replace(”xmlns = \“null \”“,null))”。 2.3:在返回之前,需要添加大括号,设置target =“null”。

生成的文件现在显示为完全有效并以编程方式创建。

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

原帖:我有同样的问题,不一定是编程的。 XSD实用程序可以完成这项工作。 问题是Microsoft不会使用Visual Studio 2012 Professional分发xsd.exe。 我搜索了我的硬盘驱动器,发现了微软的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/

试试这个:

 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);