2009-12-30 60 views
0

我有一個xml數據塊出來,我需要生成一個xsd的數據庫。所有這些工作都使用xsd.exe,但所有元素都顯示爲字符串,甚至像2079.0200這樣的東西。如何讓xsd.exe猜測類型? XmlSchemaExporter類能夠做到這一點嗎?給xml樣本自動生成xsd的最佳方式是什麼?

這裏的問題是,當我使用XML - > Create Schema命令時,Visual Studio生成了我想要的xsd(帶有十進制類型等),但我不想手動執行此操作。我正在設置一個進程,該進程需要一大塊xml並生成一個XSD。但它需要的類型不僅僅是「字符串」。

相關,但不知道這是否是一個解決方案,但(XmlSchemaInference類):Any tools to generate an XSD schema from an XML instance document?

回答

0

John的答案適用於精度比速度更重要的情況。對於我的情況,我需要許多與通過VS「Create Schema」命令生成的模式相同的模式。所以精確度不如匹配已知的基線和速度那麼重要。

這就是我最終做的。它產生的輸出等同於VS「創建模式」命令:

XmlSchemaInference inf = new XmlSchemaInference(); 

// xml variable on the next line is a string being passed in 
XmlSchemaSet schemas = inf.InferSchema(new XmlTextReader(xml, XmlNodeType.Element, null)); 
schemas.Compile(); 

XmlSchema[] schemaArray = new XmlSchema[1]; 
schemas.CopyTo(schemaArray, 0); 
XmlTextWriter wr = new XmlTextWriter(xsdOutputFileNameAndPath, Encoding.UTF8); 
wr.Formatting = Formatting.Indented; 
schemaArray[0].Write(wr); 
wr.Close(); 
0

的解決方案是手動創建架構,基於一個已經產生的一個。然後不要再次運行XSD.EXE。

+0

Visual Studio的管理,以基於XML的樣本,我想的模式,因此「手做」是不是一個很好的答案。我想知道我是否可以連接到Visual Studio ... – jcollum 2009-12-30 02:49:07

+0

Visual Studio正在調用一個猜測模式的.NET API。你不必猜測 - 你知道模式應該是什麼。所以用你的知識來修正模式是正確的。請注意,XSD.EXE/Visual Studio也無法猜測元素是否爲必需元素,或者發生了什麼限制,或者繼承結構或缺少的屬性等。您不能依賴於推斷的模式。 – 2009-12-30 03:04:55

+0

我有40多個這些產生,他們不必是超級準確的。它看起來像XmlSchemaInference會做我所需要的,或者至少這是我要去的方向。 – jcollum 2009-12-30 03:07:47

相關問題