2013-01-06 4 views
5

私はXMLファイルを解析するアプリケーションを作成しています。 。パラメータ*/XML /スキーマ/ myschema.xsdは」へのパスであることをファイル名の代わりに(埋め込みリソース)スキーマをXmlReaderSettingsに追加しますか?

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.Schemas.Add(null, "./xml/schemas/myschema.xsd"); 
settings.ValidationType = ValidationType.Schema; 
XmlReader reader = XmlReader.Create(xmlFile, settings); 
XmlDocument document = new XmlDocument(); 
document.Load(reader); 
ValidationEventHandler eventHandler = new ValidationEventHandler(settings_ValidationEventHandler); 
document.Validate(eventHandler); 

注:私は、私はそれをデシリアライズしようとする前にXMLを検証するために使用するスキーマ(の.xsd)ファイルを持っています。 xsdファイルをコンパイルする代わりに、.xsdファイルをプロジェクトの埋め込みリソースとしてコンパイルします(既に.xsdファイルを追加してビルドを設定しています)。埋め込みリソースへのアクション)

私の質問は....埋め込みリソーススキーマをXmlReaderSettingsスキーマリストに追加するにはどうすればよいですか? settings.Schemas.Addしかし、いずれも引数として埋め込まれたリソースを取りません。それらはすべてスキーマファイルへのパスになります。

過去に埋め込みリソースを使用してラベルイメージを動的に設定していますので、埋め込みリソースを使用することに多少慣れています。私はこれが狭くなるよう埋め込まれたの.xsdもストリームとして読まれることを想定しています

System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly(); 
Stream myStream = myAssembly.GetManifestResourceStream(resourceName); 

:それは私が最終的に終わるもののように見えます私の他のコードを見ると、コンテンツが含まれていストリームです私の質問を少し下に。ファイル名ではなくスキーマを含むストリームへの参照がある場合、スキーマをXmlReaderSettingsに追加するにはどうすればよいですか?

+0

Assembly myAssembly = Assembly.GetExecutingAssembly(); using (Stream schemaStream = myAssembly.GetManifestResourceStream(resourceName)) { using (XmlReader schemaReader = XmlReader.Create(schemaStream)) { settings.Schemas.Add(null, schemaReader); } } 

それとも、最初のスキーマをロードし、それを追加することができますが「ありがとう」、「助けてくれました」、または「そう」の署名を使用しないでください。 「[ハイ、感謝、タグライン、挨拶は投稿から削除してください](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be」を参照してください。 -removed-from-posts)。 –

+0

いいえ問題はありません。 –

答えて

13

あなたは、その2番目のパラメータとしてXmlReaderを取るAdd()オーバーロードを使用することができます:我々ドン、フォーラムのサイトとは異なり

Assembly myAssembly = Assembly.GetExecutingAssembly(); 
using (Stream schemaStream = myAssembly.GetManifestResourceStream(resourceName)) { 
    XmlSchema schema = XmlSchema.Read(schemaStream, null); 
    settings.Schemas.Add(schema); 
} 
関連する問題