【问题标题】:what's the best way to automate generation of an xsd given an xml sample?给定 xml 样本自动生成 xsd 的最佳方法是什么?
【发布时间】:2009-12-30 02:44:06
【问题描述】:

我有一大块来自数据库的 xml 数据,我需要为其生成 xsd。使用 xsd.exe 一切正常,但所有元素都显示为字符串,甚至像 2079.0200 这样的东西。如何让 xsd.exe 猜测类型? XmlSchemaExporter 类能做到这一点吗?

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

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

【问题讨论】:

    标签: c# xsd


    【解决方案1】:

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

    【讨论】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      相关资源
      最近更新 更多