C# 什么';在给定xml示例的情况下,自动化生成xsd的最佳方法是什么?

C# 什么';在给定xml示例的情况下,自动化生成xsd的最佳方法是什么?,c#,xsd,C#,Xsd,我有一块来自数据库的xml数据,需要为其生成xsd。使用xsd.exe可以实现所有功能,但所有元素都显示为字符串,甚至是2079.0200之类的东西。如何让xsd.exe猜测类型?XmlSchemaExporter类能够做到这一点吗 这里的问题是,当我使用XML-->Create Schema命令时,visualstudio正在生成我想要的xsd(使用十进制类型等),但我不想手工完成这项工作。我正在设置一个进程,该进程接收xml块并生成XSD。但它需要更多的类型,而不仅仅是“字符串” 相关,但不

我有一块来自数据库的xml数据,需要为其生成xsd。使用xsd.exe可以实现所有功能,但所有元素都显示为字符串,甚至是2079.0200之类的东西。如何让xsd.exe猜测类型?XmlSchemaExporter类能够做到这一点吗

这里的问题是,当我使用XML-->Create Schema命令时,visualstudio正在生成我想要的xsd(使用十进制类型等),但我不想手工完成这项工作。我正在设置一个进程,该进程接收xml块并生成XSD。但它需要更多的类型,而不仅仅是“字符串”


相关,但不知道它是否是一个解决方案(XMLSchemaReference类):

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

约翰的答案适用于精度比速度更重要的情况。在我的情况下,我需要许多与通过VS“createschema”命令生成的模式相同的模式。所以准确度不如匹配已知的基线和速度重要

这就是我最后做的。它生成的输出与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();

VisualStudio设法根据xml样本生成我想要的模式,因此“手工完成”不是一个好答案。我想知道是否可以连接到Visual Studio…Visual Studio正在调用一个猜测模式的.NET API。你不必猜测——你知道模式应该是什么。因此,使用您的知识来修正模式,使其正确。请注意,XSD.EXE/Visual Studio也无法猜测元素是否是必需的,或出现限制是什么,或继承结构,或缺少属性等。您不能依赖推断的模式。我要生成40多个元素,它们不必非常精确。看起来XMLSchemaReference可以满足我的需要,或者至少这是我要做的方向。您不能对生成的模式的不准确度设置上限。可以确定的是,原始示例将根据模式进行验证。事实上,我不确定是否可以保证同一个样本会随着时间的推移继续生成相同的模式。相信我,学习XML模式并正确理解这一点是值得的。