2012-05-11 78 views
7

我有一個xml文件(我使用XmlDocument的在C#創建的),現在我要創建XSD文件的對應也C#編程的...我怎樣才能做到這一點? 我可以使用相同的類來創建xml文件嗎?或者是否還有其他(xsd相關的)我應該使用的類?如何以編程方式在C#中創建XSD文件?

+2

應當指出的是,一個XML文檔沒有必要的元數據來構建描述的XSD文件。您的XML文檔是XSD還是您希望使用XSD描述/定義的文檔? –

+0

這是一個想用XSD文件描述的XML文檔 – Shadi

回答

2

XSD只是另一種XML類型的文件。不管你用什麼來創建你的XML文件,對於創建XSD文件也是很有用的;你只需要知道你想放在文件中的標籤/屬性...

+0

XSD代表* ahem * XML Schema Definition。那是什麼意思?這意味着它是用有效的XML編寫的。這意味着任何XML編寫者都應該能夠創建一個沒有問題的程序。 –

+0

感謝您的回答... 這正是我所做的,但問題是,雖然我在XmlDocument CreateElement方法 – Shadi

+1

@shady中編寫了xsd元素的前綴,但是如果您有代碼已經嘗試過,並且它不能正常工作,它可能有助於發佈相關的部分,所以我們可以幫助你 – psubsee2003

4

如果你只是想從一個XML文件中產生一個XSD文件,那麼你可以使用微軟的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命名空間。

看一看的code example found here on MSDN。它會給你一個另一種方法的想法。它提供了一個編程友好的API來生成XSD,而不是處理實際的XML。

1

解決方案: 我最初發布的答覆,但堆棧溢出而編輯我的反應,所以這裏是編輯。我建議的原始工具是另一種方式。然後我做了一些研究,並且有人推薦了一種名爲MyGenerations或類似的工具。這需要安裝,下載模板和工作,因此太複雜了。然後我做了一些更多的研究,並在CodePage上找到了一個非常漂亮的解決方案,但是那個解決方案很有效,因爲我測試了它,需要進行一些修改。該代碼被稱爲XmlToXsd與網址:

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);」添加一個if語句,如果目標名稱空間不爲空,則只加載if語句。

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

2.1:刪除targetnamespace屬性項。 2.2:替換呼叫後,添加另一個替換呼叫「。更換( 「的xmlns = \」 空\ 「」,NULL))」 2.3:迴歸之前,需要添加括號,設定目標= 「空」

生成的文件現在看起來完全有效和編程創建。

是的,人們可以使用XSD.EXE但手動,但我需要談話的程序化的方式

原貼: 我有同樣的問題,不一定是編程的XSD工具可以完成任務。 。問題是,微軟沒有在Visual Studio 2012 Professional上分發xsd.exe,我搜索了我的硬盤,並在微軟的SDK中找到了該實用程序,我的磁盤上的路徑爲「C:\ Program Fi les(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);