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

7

我有一个XML文件(是用C#的XmlDocument创建的),现在我需要以编程方式创建相应的XSD文件...我该怎么做?? 我可以使用相同的类来创建XML文件吗?或者我应该使用其他与XSD相关的类吗?


2
需要注意的是,XML文档没有元数据来构建描述该文档的XSD。您的XML文档是XSD还是您希望使用XSD来描述/定义的文档? - Tim S.
这是一个XML文档,我想使用XSD文件进行描述。 - Shadi
5个回答

4
如果您只想从XML文件生成XSD文件,则可以使用Microsoft的XSD.EXE,该工具包含在Visual Studio中。
要使用它,请打开Visual Studio命令提示符。然后输入xsd file.xml以为该XML文件生成模式。
您还可以使用该工具为XML输入生成类,只需传入/classes参数即可。

4
虽然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。

2

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


XSD代表XML模式定义。这是什么意思?这意味着它是用有效的XML编写的。这意味着任何XML编写器都应该能够轻松创建一个。 - Mike McMahon
谢谢你的回答,这正是我所做的。但问题在于,尽管我在XmlDocument CreateElement方法中写入了前缀的xsd元素,但它们并没有被生成。 - Shadi
1
@shady 如果你有一些代码已经尝试过,但是没有正常运行,把相关部分贴出来会有助于我们帮助你。 - psubsee2003
@shady 如果你尝试了一些编写XML文档的操作,但是没有达到你的预期,请发帖说明你所做的和你期望的结果。 - Peter Ritchie

1
解决方案: 我原本发布了一条回复,但是Stack Overflow要求我编辑我的回复,所以这里是编辑后的内容。我最初推荐的工具是反向操作的。然后我进行了一些研究,有人推荐了一个叫做MyGenerations或类似的工具。那需要安装、下载模板和大量的工作,太过复杂了。然后我又做了更多的研究,在CodePage上找到了一个相当不错的解决方案,但是该解决方案需要进行一些修改才能正常使用。这个代码被称为XmlToXsd,URL为:

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

程序部分有两个错误。首先,它将XSD保存到可执行文件的根目录。不用担心,exe仅调用位于一个CS文件中的方法。只需在项目中包含该CS文件,并使用给定的行进行调用,只需将路径更改为与XML相同的文件夹即可。此外,作者使用了一个垃圾URL的targetnamespace。DevExpress会对不存在的URL提出抱怨。通过一些努力,我将目标URL替换为null。在随附的CS文件中,我必须进行一些更改。比我更理解的人可以修改到他/她的极限。我只是通过告诉别人我做了什么来帮助别人,所以没有静态反馈。
更改1:在“target = XNamespace.Get(targetNamespace);”之前添加一个if语句,仅在目标命名空间不为空时加载。
更改2:我添加了另一个if语句以进行返回。空返回,原始返回的副本进行以下修改:
2.1:删除targetnamespace属性项。
2.2:在replace调用之后,添加另一个replace调用“.Replace(“xmlns = \”null\“”,null))”。
2.3:在返回之前,需要添加大括号,设置target =“null”。
生成的文件现在看起来完全有效并且是以编程方式创建的。

是的,可以手动使用XSD.exe,但我需要一种编程方式进行转换。

原帖: 我有同样的问题,不一定是编程的。 XSD实用程序确实可以完成工作。 问题在于Microsoft没有将xsd.exe与Visual Studio 2012 Professional一起分发。 我搜索了硬盘并在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/


-1

试试这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接