2011-11-08 6 views
1

シリアル化されたデータの検証に問題があります。XmlSerializer + schemaLocationについて混乱しました

私はXSDファイルを使い始めました。私はいくつかのサードパーティから入手しました。 xsdツールを使用して生成されたC#クラス。次に、最上位オブジェクトに

[XmlAttribute("noNamespaceSchemaLocation", Namespace = System.Xml.Schema.XmlSchema.InstanceNamespace)] 
public string SchemaLocation = "http://localhost/schemas/AP_Transactions_10052011.xsd"; 

を追加しました。問題のURLは、コードを実行しているマシンからアクセスできることは明らかです。それから私は、正しくこれまでのところは良い

<?xml version="1.0" encoding="utf-8"?> 
<BU_AP_Vendor_Invoices xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="http://local.com/schemas/AP_Transactions_10052011.xsd"> 
... 
</BU_AP_Vendor_Invoices> 

を生成する、XmlSerializerを使用して、それをシリアル化しています。

public static void Validate(TextReader xmlData) 
{ 
    XmlReaderSettings settings = new XmlReaderSettings(); 
    settings.ValidationType = ValidationType.Schema; 
    settings.ValidationFlags = XmlSchemaValidationFlags.ProcessIdentityConstraints | XmlSchemaValidationFlags.ReportValidationWarnings; 
    settings.ValidationEventHandler += delegate(object sender, ValidationEventArgs args) 
    { 
     Console.WriteLine(args.Message); 
    }; 

    using (XmlReader xmlReader = XmlReader.Create(xmlData, settings)) 
     while (xmlReader.Read()) ; 
} 

XMLファイル内のすべての要素のためのCould not find schema information for the element 'element name'警告を結果: は今、私はそうのようなファイルを検証しようとしています。私は、XSDが単にロードされていないことを意味します。

私はXmlReaderSettings.Schemasを見ていましたが、読者はどのようにそこに追加すべきかを知っていましたか?私はスキーマを明示的に追加しないと、魔法は単に起こるだろうと考えましたが、それはうまくいかないようです。

問題を正しく解決する方法はありますか?

答えて

0

this postをご覧ください。要点はXmlSchemaValidationFlags.ProcessSchemaLocationを使用することです。

+0

私はそれを逃したとは思わない。 –