为分层数据创建XSD
本文关键字:XSD 创建 数据 分层 | 更新日期: 2023-09-27 18:26:04
我想将对象导出到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文件导入应用程序中。
使用XSD.EXE生成XSD:这是一个标准的.NET Framework工具。看见http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx查看它的使用方法。
这里有两个不同的问题需要回答。。。
首先,如何将对象导出到XML文件。在.NET中有很多方法可以做到这一点。在这篇博客文章中,对两种最常见的方法(XmlSerializer和DataContractSerializer)进行了并排比较。
你问题的第二部分稍微宽泛一点。从现有的XML文件生成xsd模式不是一门精确的科学,但有一些工具可以从XML文件推断(或猜测)模式。有各种各样的小工具可以为你做到这一点——也许值得尝试其中的一些,看看哪一个能给你带来最好的结果。和往常一样,谷歌是你的好朋友:)
您可以为此使用标准的XML序列化程序(带有xsd.exe)。您需要在基类上使用KnownTypeAttribute,以便反序列化程序知道如何重新水合结构。
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.knowntypeattribute.aspx
如果您想从类中动态生成XML,可以使用System.Reflection
例如:
Type type = typeof(ExportedOwner);
var propertyinfos = type.GetProperties(); // gives you a list of all properties of ExportedOwner
然后使用您最喜欢的XMlWriter根据您的规范生成XML。