2014-03-25 98 views
0

我遇到問題,無法驗證XML。我有一個代碼,我成功地將XML加載到數據集中。沒問題。如果XML不符合數據集的模式,則會引發異常。拋出的異常非常簡單,沒有用處。像「無法加載XML文件....」。根據模式驗證XML

我想要做的是在加載到數據集之前驗證XML。我發現以下文章完全符合我的要求。

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

當我在文章中使用的代碼它給我以下異常

布爾[]是作爲屬性的複雜類型 的複雜type.Cannot序列化值。

數據庫中的一個列是布爾型[]。任何人都可以暗示我有什麼問題嗎?

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

編輯:

我的數據集在XSD文件中定義的,我不是從代碼生成它。只有一個表正在使用一個類型爲System.Boolean []的數據列,並且只有當我使用table.WriteXmlSchema()時,這個表並沒有發生異常。

+0

是不是有指定是否序列化列的屬性VS一個元素的DataColumn類型的屬性? –

+0

沒有顯然 –

+2

請參閱[ColumnMapping](http://msdn.microsoft.com/en-us/library/system.data.datacolumn.columnmapping.aspx)屬性。 –

回答

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()); 
+0

我也嘗試了我提到的鏈接中的代碼。我在WriteXmlSchema()中得到一個異常... Column System.Boolean []是一個複雜類型,無法將複雜類型的值序列化爲Attribute。 –

+0

當我複製你的代碼。它工作正常。嗯,問題在哪裏? –

+0

我能夠生成除boolean []之外的所有表的模式。 –