2013-04-08 73 views
0

我有一個xml模式。我想填充一個DataSet並使用這個模式來驗證它。從XML模式進行C#數據集驗證

DataSet package = new DataSet(); 
StringReader schemaResourceReader = new StringReader(PackageValidationLibrary.Properties.Resources.myPackage); 
package.ReadXmlSchema(schemaResourceReader); 


package.Tables["Table1"].Rows.Add(packageDetail.date,packageDetail.code,packageDetail.amount,packageDetail.place,"0"); 
package.Tables["Table2"].Rows.Add("0","0"); 
foreach (Cek data in recordList){ 
    package.Tables["Table3"].Rows.Add(data.Serial, data.Code, data.Branch, data.ValidityDate, "0"); 
} 

使用代碼以上可以裝入數據,但儘管數據集導入架構我不能對其進行驗證。

我試圖使用package.GetXml()方法獲取xml字符串,並重新加載xml。然後我得到例外。

如何驗證此表?謝謝。


編輯 正如我從答案理解和評論是不可能的,而填充數據集來驗證。然後我從數據集中讀取xml並使用下面給出的配置加載它。

_schema = XmlSchema.Read(new StringReader(PackageValidationLibrary.Properties.Resources.TakasPaketi), new ValidationEventHandler(ValidationEventHandler)); 
       XmlReaderSettings _settings = new XmlReaderSettings(); 
       _settings.Schemas.Add(_schema); 
       _settings.ValidationType = ValidationType.Schema; 
       XmlReader vreader = XmlReader.Create(stream, _settings); 
+1

通常,讀取XML Schema會爲dataSet,表結構等設置權限。它然後生活驗證自己。您不會被允許添加任何不符合架構的內容,因此如果架構設置正確,則驗證表是自動假設。 – Nevyn 2013-04-08 13:33:02

回答

1

我相信,這將做到這一點:

// First, read in the XML schema 
    DataSet MyDataSet = new DataSet(); 
    MyDataSet.ReadXmlSchema(@"C:\YourSchema.xsd"); 


    // Now, read in the XML file (it is validated 
    // against the schema when it is read in). 
    MyDataSet.ReadXml(@"C:\YourFile.xml"); 

如果您編輯數據xml文件不匹配的模式,當讀取XML文件,將引發異常。

所以在你的情況下,你可能不得不將數據集導出到一個xml字符串,然後再讀回來。你說你這樣做時會收到異常....什麼異常?也許這些數據對於您的模式無效。

+0

請注意,此模型只會驗證那些影響創建有效數據集的能力的xml模式約束。例如,它將驗證「five」不是有效的xs:整數值。但是,如果您對某個字符串(xs:enumeration)具有枚舉限制之類的內容,則不會驗證xml文件中的字符串值是否與枚舉的某個可能值匹配。 – Marc 2014-04-01 14:58:55