7

我想生成一个基于类的 XML Schema,就像您可以使用Xsd.exe 工具一样。

例如xsd.exe /type: typename /outputdir:c:\ assmeblyname

有没有办法通过使用 .NET Framework 中的类而不是使用独立工具来做到这一点?

我确信我已经看到了有关任务引用或类似的信息——即编程的东西——可以用来代替其中一些独立实用程序,或者一些独立实用程序通过 FCL 或 Microsoft API 获得它们的功能。

4

2 回答 2

1

发现这个看起来应该可以解决问题......

public static string GetSchema<T>()
    {
        XmlAttributeOverrides xao = new XmlAttributeOverrides();
        AttachXmlAttributes(xao, typeof(T));

        XmlReflectionImporter importer = new XmlReflectionImporter(xao);
        XmlSchemas schemas = new XmlSchemas();
        XmlSchemaExporter exporter = new XmlSchemaExporter(schemas);
        XmlTypeMapping map = importer.ImportTypeMapping(typeof(T));
        exporter.ExportTypeMapping(map);

        using (MemoryStream ms = new MemoryStream())
        {
            schemas[0].Write(ms);
            ms.Position = 0;
            return new StreamReader(ms).ReadToEnd();
        }
    }
于 2010-11-10T23:28:19.913 回答
1

做这个:

public string GetFullSchema() {

        string @namespace = "yourNamespace";

        var q = from t in Assembly.GetExecutingAssembly().GetTypes()
        where t.IsClass && t.Namespace ==  @namespace
        select t;

        XmlReflectionImporter importer = new XmlReflectionImporter(@namespace);

        XmlSchemas schemas = new XmlSchemas();
        XmlSchemaExporter exporter = new XmlSchemaExporter(schemas);


        foreach (var x in q)
        {
                var map = importer.ImportTypeMapping(x);
                exporter.ExportTypeMapping(map);
        }

        using (MemoryStream ms = new MemoryStream())
        {
           schemas[0].Write(ms);
           ms.Position = 0;
           return new StreamReader(ms).ReadToEnd();
        }

}
于 2011-01-20T19:12:23.777 回答