I have a xml file (that i created in c# using XmlDocument) and now i have to create xsd file the corresponds to it also programmatically in C# ... how can I do this ?? can I use the same classes for creating xml files ? or are there any other (xsd related) classes I should use ??
5 回答
虽然 XML Schema 文件是一个 XML 文件,但它有些东西可能会使“手工”操作起来很麻烦;有人可能会说,为什么要使用 DOM API 而不是使用 XSD.exe 或 XSD2Code.exe 生成的 C# 类来编写 XML?或者稍微推一下……有点类似于有人说 C# 语句最终会变成 IL 程序集;为什么不写 IL 呢?
Schema Object Model API 提供了另一种选择;在 .NET 中,它是System.Xml.Schema命名空间。
查看MSDN上的代码示例。它将为您提供另一种方法的想法。它提供了一个对程序员友好的 API 来生成 XSD,而不是处理实际的 XML。
如果您只想从 XML 文件生成 XSD 文件,那么您可以使用 Microsoft 的XSD.EXE,它包含在 Visual Studio 中。
要使用它,请打开 Visual Studio 命令提示符。然后输入xsd file.xml
以生成该 XML 文件的模式。
您还可以使用该工具为您的 XML 输入生成类,只需传入/classes
参数即可。
XSD is just another XML-type file. whatever you are using to create your XML file will also be useful to create the XSD file; you just need to know what tags/attributes you want to put in the file...
解决方案:我最初发布了回复,但 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 文件中,我必须进行一些更改。其他人的理解比我能修改到他/她的内心程度。我只是通过告诉他们我做了什么来帮助别人,所以没有静态的回复。
变化1:在“target = XNamespace.Get(targetNamespace);”之前 为目标命名空间添加一个 if 语句,仅在不为 null 时才加载。
更改 2:我为返回添加了另一个 if 语句。空返回,原返回的副本修改如下:
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/
尝试这个:
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);