Xml ファイルを解析するアプリケーションを作成しています。逆シリアル化を試みる前に Xml を検証するために使用するスキーマ (.xsd) ファイルがあります。
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/schemas/myschema.xsd" は、プログラム実行に関連する .xsd へのパスであることに注意してください。
ファイル名/パスを使用したくありません。代わりに、.xsd ファイルをプロジェクトの埋め込みリソースとしてコンパイルします (既に .xsd ファイルを追加し、ビルド アクションを埋め込みリソースに設定しています)。
私の質問は....埋め込みリソース スキーマを XmlReaderSettings スキーマ リストに追加するにはどうすればよいですか? settings.Schemas.Addにはオーバーロードされたメソッドが 4 つありますが、いずれも埋め込みリソースを引数として取りません。それらはすべて、スキーマ ファイルへのパスを取ります。
過去に埋め込みリソースを使用してラベル画像を動的に設定したことがあるので、埋め込みリソースの使用にはある程度慣れています。私の他のコードを見ると、最終的にはコンテンツを含むストリームのように見えます:
System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
Stream myStream = myAssembly.GetManifestResourceStream(resourceName);
埋め込まれた .xsd もストリームとして読み込まれると想定しているので、これで質問が少し絞り込まれます。ファイル名ではなくスキーマを含むストリームへの参照がある場合、スキーマを XmlReaderSettings に追加するにはどうすればよいですか?