我有一个xml文件(我使用XmlDocument在c#中创建)现在我必须创建xsd文件,它也在C#中以编程方式对应...我该怎么做? 我可以使用相同的类来创建xml文件吗?或者我应该使用其他任何(xsd相关)类?
答案 0 :(得分:4)
如果您只想从XML文件生成XSD文件,则可以使用Visual Studio附带的Microsoft XSD.EXE。
要使用它,请打开Visual Studio命令提示符。然后输入xsd file.xml
以生成该XML文件的模式。
您也可以使用该工具为XML输入生成类,只需传入/classes
参数。
答案 1 :(得分:4)
虽然XML Schema文件是一个XML文件,但它有某些东西可能使得“手动”执行它变得很麻烦;可以说为什么使用DOM API编写XML而不是使用XSD.exe或XSD2Code.exe生成的C#类?或者推动它...有点类似于有人说C#语句最终变成IL汇编;为什么不写IL呢?
Schema Object Model API提供了另一种替代方案;在.NET中,它是System.Xml.Schema命名空间。
看看code example found here on MSDN。它会给你一个另一种方法的想法。它提供了一个程序员友好的API来生成XSD,而不是处理实际的XML。
答案 2 :(得分:2)
XSD只是另一种XML类型的文件。用于创建XML文件的任何内容对于创建XSD文件也很有用;你只需要知道你想要放在文件中的标签/属性......
答案 3 :(得分:1)
解决方案: 我最初发布了一个回复,但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:核对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/
答案 4 :(得分:-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);