如何定义XSD并在XML中使用XSD

如何定义XSD并在XML中使用XSD,第1张

1.XSD控制可指派给元素和属性的数据类型; 2.XSD使你可以创建自己的数据类型; 3.XSD使你可以对数据指定限制; 4.定义XSD的句式与XML文档所使用的句式相同; 5.可使用XML的模式内容来验证混合内容; 6.XML模式是可扩展的; 7.XML模式是自文档模式。

在xml文件的根元素里引入。1个xml文档可以引入多个不同的schema文档。

根据引入的schema有无命名空间,又分为2种引入方法。

1).引入无命名空间的schema文档。

2).引入有命名空间的schema文档。

1. 首先在VS2005中添加一个XSD文件。

2. 使用VS2005工具XSD.exe(SDK\v2.0\Bin\xsd.exe)自动生成实体类:

xsd /c /namespace:myCompany /language:CS temp1.xsd

也可以生成DataSet类型的类:

xsd /dataset /language:CS temp1.xsd

( 类文件和XSD之间可以相互转换,也就是说,你也可以先生成类,然后自动生成XSD)

自动读取XML数据到实体类:

XmlSerializer xs = new XmlSerializer(typeof(myClassType))

using (FileStream fs = new FileStream(XmlFilePath, FileMode.Open))

{

return (myClassType)xs.Deserialize(fs)

}

3. 如何由XML生成XSD?

- 可以用工具,如XMLSpy,首先打开XML, 然后DTD/Schema ->Generate DTD/Schema, 选择W3c Sehcma即可。

- 此方法不一定能生成确切满足需求的XSD,另需修改。

4. 如何由XSD生成XML?

- 可以用其他工具,如XMLSpy,DTD/Schema ->Generate sample XML file...

- 可以由XSD生成类,然后写代码实例化这个类,最后序列化为XML

- 如何自动给类每个属性设置一个空值:(用反射的方法)

代码示例:

/// <summary>

/// Get all properties and set default value

/// </summary>

/// <typeparam name="T">Type</typeparam>

/// <param name="item">Object</param>

private static void ReflctProperties<T>(T item)

{

PropertyInfo[] pty = typeof(T).GetProperties()

Type t = item.GetType()

if (pty != null)

{

foreach (PropertyInfo info in pty)

{

if (!info.CanWrite) continue

if (info.PropertyType == typeof(String))

{

t.GetProperty(info.Name).SetValue(item, String.Empty, null)

}

if (info.PropertyType == typeof(Boolean))

{

t.GetProperty(info.Name).SetValue(item, true, null)

}

}

}

}

- 反射读取类的属性:

public static object GetProperty<T>(T item, string PropertyName)

{

PropertyInfo propertyInfo = item.GetType().GetProperty(PropertyName)

if (propertyInfo != null)

{

return propertyInfo.GetValue(item, null)

}

return null

}

- 如何序列化为XML?

/// <summary>

/// Serialize class instance to XML file

/// </summary>

/// <typeparam name="T">type</typeparam>

/// <param name="XMLFileToCreate">XMLFileToCreate</param>

/// <param name="instance">class instance</param>

public void Serialize<T>(string XMLFileToCreate, T instance)

{

if (instance == null) return

XmlSerializer xs = new XmlSerializer(typeof(T))

using (StreamWriter sw = new StreamWriter(XMLFileToCreate))

{

xs.Serialize(sw, instance)

}

}

(Link: 使用XMLSerializer类持久化数据 )


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11709455.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存