2011-11-11 18 views
2

xsd.exe(VS 2010コマンドプロンプト)、 を使用してC#クラスフォームschamを生成しましたが、XMLファイルのクラスをシリアライズするときに、outファイルにスキーマのエントリがありません。xmlスキーマから生成されたCSクラス

シリアル化されたXML:

<?xml version="1.0" encoding="utf-16"?> 
<Dokumenty xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" idSystemuLokalnego="ASD" dataUtworzenia="0001-01-01T00:00:00"> 
<Wniosek> 
    <Beneficjent /> 
</Wniosek> 

私は、コードを使用してスキーマを検証しよう:

 //Serilalize xml to string 
     StringWriter sw = new StringWriter(); 
     XmlTextWriter xw = new XmlTextWriter(sw); 
     x.Serialize(xw, doc); 
     String xml = sw.ToString(); 

     StringReader sr = new StringReader(xml); 
     XmlTextReader xtr = new XmlTextReader(sr); 
     XmlReaderSettings settings = new XmlReaderSettings(); 
     settings.Schemas.Add("", "schemas\\SimWniosekApl_v2.0.xsd"); 
     settings.ValidationType = ValidationType.Schema; 

     //XmlReader reader = XmlReader.Create(xtr); 
     XmlDocument document = new XmlDocument(); 
     document.Load(xtr); 

     ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationHandler); 

     // the following call to Validate succeeds. 
     document.Validate(eventHandler); 

それは例外で失敗: 追加情報:文書のXmlSchemaSetをnullまたはスキーマがありません。 Validateを呼び出す前にスキーマ情報を提供します。

どうすればいいですか?

答えて

0

リーダーを作成するときに、XmlReaderSettingsを適用する必要があります。

そのコードは設定で何もしません。設定が作成される前に、リーダーがすでに作成されています。コードは単に設定を作成してから忘れてしまいます。

StringReader sr = new StringReader(xml); 
    //XmlTextReader xtr = new XmlTextReader(sr); 
    XmlReaderSettings settings = new XmlReaderSettings(); 
    settings.Schemas.Add("", "schemas\\SimWniosekApl_v2.0.xsd"); 
    settings.ValidationType = ValidationType.Schema; 

    XmlReader reader = XmlReader.Create(xtr,settings); 
    XmlDocument document = new XmlDocument(); 
    document.Load(reader); 

    ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationHandler); 
    document.Validate(eventHandler); 

完全な例はここにあります:
http://msdn.microsoft.com/en-us/library/ms162371.aspx

関連する問題