根据模式验证XML

时间:2014-03-25 16:05:04

标签: c# xml xml-serialization

我遇到了问题,我无法验证XML。我有一个代码,我成功地将XML加载到数据集中。没问题。如果XML不是根据数据集的模式,则会抛出异常。抛出的异常非常简单且无用。类似于"无法加载XML文件...."。

我要做的是在加载到数据集之前验证XML。我发现以下文章完全符合我的要求。

http://blogs.msdn.com/b/marcelolr/archive/2010/04/02/dataset-does-not-validate-xml-schema-xsd.aspx

当我使用文章中的代码时,它给出了以下异常

  

Boolean []是一个复杂类型.Cannot序列化复杂类型的值   作为属性。

我在数据库中的一个列是boolean []。任何人都可以暗示我的问题是什么?

StreamWriter writer = new StreamWriter("c:\\abc.xsd");
String test = currentDataset.GetXmlSchema(); //exception
currentDataset.WriteXmlSchema(writer);

编辑:

我的数据集是在XSD文件中定义的,我没有从代码中生成它。只有一个表使用类型为System.Boolean []的数据列,当我使用table.WriteXmlSchema()时,只有这个表没有给出异常。

1 个答案:

答案 0 :(得分:0)

尝试从文章中生成XSD,并将其与abc.xsd文件进行比较。 以下适用于我:

DataSet ds = new DataSet();
DataTable table = ds.Tables.Add("Example");
table.Columns.Add("BoolArray", typeof(bool[]));

table.Rows.Add(new object[] { new bool[]{true, false} });
table.Rows.Add(new object[] { new bool[] { false, false } });

StringWriter dataWriter = new StringWriter();
StringWriter schemaWriter = new StringWriter();
table.WriteXmlSchema(schemaWriter);
table.WriteXml(dataWriter, XmlWriteMode.IgnoreSchema);
Console.WriteLine(schemaWriter.ToString());