2012-02-28 59 views
0

我想将对象导出到XML并创建XSD。以下是基类为分层数据创建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文件导入到应用程序中。

回答

0

有2个不同的问题,在这里回答...

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

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

0

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

例如:

Type type = typeof(ExportedOwner); 

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

然后根据您最喜爱的XML编写的规范生成的XML。

+0

Xsd2Code从xsd模式生成cs/vb文件,而不是其他方式。 – MattDavey 2012-02-28 10:00:50

+0

嗯,真的 - 我一定弄糊涂了我用的另一个插件的工具。奇怪 - 可能已经发誓它被称为那样。 – Alex 2012-02-28 10:16:34

+0

我想你的意思是xsd.exe :) – MattDavey 2012-02-28 10:24:35