Dataset利用xsd读取xml,数值类型处理及验证
后面打算傻傻的用xsd数据集算了,转而想到,做个对应
的Xsd应该可以当做这个xml的架构文件。自己用vs添加一个xsd,和xml对应起来,然后把它当做xml文件的结构说明文件,成功把类型按xsd设置,自动转换过来了。相信用vs写xsd不难吧,简直太容易。最后再去Google的时候,才明白,vs也是又工具生成xml的架构文件的。在vs 2008里面,打开xml,在IDE的菜单,会多出一个xml菜单。下拉看到生成架构就对了,然后手工去改那默认的数据类型.
总结起来的关键点是:
1,vs 会以一个dataset的单位来生成一个xsd文件,不管它, 也不用理会这个dataset叫什么名字(一般也是xsd的名字)
2,xsd和xml文件中的表节点名字对应起来,各自的字段名字对应起来,字段的顺序可以不一样,但是字段个数应该是
xsd大于等于xml(这里先不管验证xml的合法性,只管数据转换)。
3,调用xmlread的时候,XmlReadMode参数设置为XmlReadMode.InferTypedSchema;
代码如下
DataSet ds = new DataSet();
ds.ReadXmlSchema(Server.MapPath("~/App_Code/DataSet1.xsd"));
ds.ReadXml(Server.MapPath("Data.xml"), XmlReadMode.InferTypedSchema);
附使用xsd验证xml文档的代码,载自msdn(不再说明如何生成xsd)
xsd架构添加到 XmlReaderSettings 对象的 XmlSchemaSet Schemas 属性中。XmlReaderSettings 对象作为参数传递给需要验证的 XML 文档的 XmlReader 对象的 Create 方法。
XmlReaderSettings 对象的 ValidationType 属性设置为 Schema,强制通过 XmlReader 对象的 Create 方法验证 XML 文档。ValidationEventHander 添加到 XmlReaderSettings 对象中,以处理 XML 文档和架构的验证过程中发现的错误所引发的任何 Warning 或 Error 事件。
using System;
using System.Xml;
using System.Xml.Schema;
class XmlSchemaSetExample
{
static void Main()
{
XmlReaderSettings booksSettings = new XmlReaderSettings();
booksSettings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
booksSettings.ValidationType = ValidationType.Schema;
booksSettings.ValidationEventHandler += new ValidationEventHandler(booksSettingsValidationEventHandler);
XmlReader books = XmlReader.Create("contosoBooks.xml", booksSettings);
while (books.Read()) { }
}
static void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
Console.Write("WARNING: ");
Console.WriteLine(e.Message);
}
else if (e.Severity == XmlSeverityType.Error)
{
Console.Write("ERROR: ");
Console.WriteLine(e.Message);
}
}
}