在给定xml样本的情况下,自动生成xsd的最佳方法是什么?

时间:2009-12-30 02:44:06

标签: c# xsd

我有一大块xml数据来自我需要生成xsd的数据库。使用xsd.exe完成所有工作,但所有元素都显示为字符串,甚至像2079.0200这样的东西。如何让xsd.exe猜测类型? XmlSchemaExporter类能够执行此操作吗?

这里的问题是当我使用XML时,Visual Studio正在生成我想要的xsd(带小数类型等) - >创建架构命令,但我不想手动执行此操作。我正在设置一个进程,它接收一大块xml并生成一个XSD。但它需要的不仅仅是“字符串”。

相关,但不知道它是否是一个解决方案(XmlSchemaInference类):Any tools to generate an XSD schema from an XML instance document?

2 个答案:

答案 0 :(得分:0)

解决方案是根据生成的模式手动创建模式。然后不要再次运行XSD.EXE。

答案 1 :(得分:0)

John的答案适用于准确性比速度更重要的情况。对于我的情况,我需要许多模式,这些模式与通过VS“Create Schema”命令生成的模式相同。因此,准确性并不像匹配已知的基线和速度那么重要。

这就是我最终要做的事情。它产生的输出与VS“Create Schema”命令相同:

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