【问题标题】:Create XSD for hierarchical data为分层数据创建 XSD
【发布时间】:2012-02-28 08:50:20
【问题描述】:

我想将对象导出到 XML 并创建 XSD。以下是基类

class Owner
{
    private int id;
    private string name;
    private List<Car> cars;
    private int age;
}

class CarTemplate
{
    private int drive;
    private double engineCc;
}

class Car
{
    private int id;
    private string name;
    private double cost;
    private CarTemplate template;
}

以下是我想要导出到 XML 并从中创建 XSD 的修改后的结构

class ExportedOwner
{
    private int id;
    private string name;
    private List<Car> cars;
}

class ExportedCar
{
    private string name;
    private double cost;
    private CarTemplate template;
}

XML的结构应该如下格式

<?xml version="1.0" encoding="utf-8" ?>
<Owner>
    <id>1</id>
    <Name>John</Name>
    <Age>49</Age>
    <Cars>
        <Car>
            <id>1</id>
            <Name>Merc Class C</Name>
            <CarTemplate>
                <drive>2</drive>
                <engineCc>2500</engineCc>
            </CarTemplate>
        </Car>
        <Car>
            <id>2</id>
            <Name>Merc Class M</Name>
            <CarTemplate>
                <drive>4</drive>
                <engineCc>2900</engineCc>
            </CarTemplate>
        </Car>
    </Cars>
</Owner>

如何为 XML 格式创建 XSD。我想要 XSD 将 XML 文件导入回应用程序。

【问题讨论】:

    标签: c# .net xml xsd


    【解决方案1】:

    使用 XSD.EXE 生成您的 XSD:它是一个标准的 .NET Framework 工具。请参阅http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx 以了解其使用方法。

    【讨论】:

      【解决方案2】:

      这里有 2 个不同的问题需要回答...

      首先,如何将对象导出到 XML 文件。在 .NET 中有很多方法可以做到这一点。最常见的两个(XmlSerializer 和 DataContractSerializer)在此blog post 中并排比较。

      您问题的第二部分更广泛一些。从现有的 XML 文件生成 xsd 模式并不是一门精确的科学,但有一些工具可以从 XML 文件中推断(或猜测)模式。有各种小工具可以为您做到这一点 - 可能值得尝试其中一些,看看哪一个能给您最好的结果。一如既往,google is your good friend :)

      【讨论】:

        【解决方案3】:

        您可以为此使用标准 XML 序列化程序(使用 xsd.exe)。您需要在基类上使用 KnownTypeAttribute,以便反序列化的人知道如何重新水化结构。

        http://msdn.microsoft.com/en-us/library/system.runtime.serialization.knowntypeattribute.aspx

        【讨论】:

          【解决方案4】:

          如果你想从你的类中动态生成 XML,你可以使用System.Reflection

          例如:

          Type type = typeof(ExportedOwner);
          
          var propertyinfos = type.GetProperties(); // gives you a list of all properties of ExportedOwner
          

          然后使用您最喜欢的 XMl Writer 根据您的规范生成您的 XML。

          【讨论】:

          • 嗯,没错——我一定是把这个工具和我用的另一个插件搞混了。奇怪 - 可以发誓它是这样称呼的。
          • 是的,就是这样!虽然找不到加载项了:)。
          • 它与 Windows SDK 捆绑在一起! C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\xsd.exe
          猜你喜欢
          • 2018-02-27
          • 1970-01-01
          • 1970-01-01
          • 2023-03-09
          • 1970-01-01
          • 1970-01-01
          • 2010-09-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多