- ani
- 常連さん
- 会議室デビュー日: 2007/05/17
- 投稿数: 44
|
投稿日時: 2008-02-13 15:37
こんにちは。
いつもお世話になっております。
Windows アプリケーションでスキーマを使用したXMLデータの検証を実装しています。
コード: |
|
Dim sc as XmlSchemaSet = new XmlSchemaSet()
sc.Add(Nothing, "test.xsd")
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.ValidationType = ValidationType.Schema
settings.Schemas = sc
Dim reader as XmlReader = XmlReader.Create("test.xml", settings)
while reader.Read()
end while
|
上記のようなコードを記述して検証が行われることは確認できたのですが、
ここで「test.xsd」にプロジェクト内のスキーマ(プロジェクト内で定義したスキーマ)を使用することはできないでしょうか?
実行環境でスキーマファイルを使用したくないのです。
何かご存知に方がみえましたらご教示下さい。
<環境>
Windows XP, .NET Framework 2.0, Visual Studio 2005, Visual Basic
|
- かめたろ
- ぬし
- 会議室デビュー日: 2003/03/20
- 投稿数: 255
|
投稿日時: 2008-02-14 16:50
「test.xsd」をアセンブリに埋め込みたいと解釈しました。
プロジェクト内の「test.xsd」のファイルのプロパティで、ビルドアクションを「埋め込まれたリソース」にしあげて、コードでAssembly.GetManifestResourceStream メソッドを使用してみてはいかがでしょうか。
埋め込まれたtest.xsdのStreamが取得できるはずなので、そのStreamをXmlSchema.Read メソッドでXmlSchemaに入れて、そのXmlSchemaをXmlSchemaSet.Add メソッド でXmlSchemaSetに追加すればいけるような気がします。
|
- ani
- 常連さん
- 会議室デビュー日: 2007/05/17
- 投稿数: 44
|
投稿日時: 2008-02-14 19:27
かめたろさん、レスありがとうございます。
引用: |
|
「test.xsd」をアセンブリに埋め込みたいと解釈しました。
|
はい。その通りです。
説明が不十分で申し訳ありません。
アセンブリという表現をすればよかったのですね。
引用: |
|
プロジェクト内の「test.xsd」のファイルのプロパティで、ビルドアクションを「埋め込まれたリソース」にしあげて、コードでAssembly.GetManifestResourceStream メソッドを使用してみてはいかがでしょうか。
埋め込まれたtest.xsdのStreamが取得できるはずなので、そのStreamをXmlSchema.Read メソッドでXmlSchemaに入れて、そのXmlSchemaをXmlSchemaSet.Add メソッド でXmlSchemaSetに追加すればいけるような気がします。
|
教えていただいた通り「test.xsd」のプロパティでビルドアクションを「埋め込まれたリソース」にして、以下のようにコードを変更しました。
コード: |
|
Dim assembly As Assembly = assembly.GetExecutingAssembly()
Dim stream As Stream = assembly.GetManifestResourceStream(プロジェクト名.test.xsd)
Dim validationEventHandler As New ValidationEventHandler(AddressOf XSDTestValidationEventHandler)
'XSDTestValidationEventHandlerは別途定義
Dim schema As XmlSchema = XmlSchema.Read(stream, validationEventHandler)
Dim sc As XmlSchemaSet = new XmlSchemaSet()
sc.Add(schema)
Dim settings As XmlReaderSettings = new XmlReaderSettings()
settings.ValidationType = ValidationType.Schema
settings.Schemas = sc
Dim reader As XmlReader = XmlReader.Create("test.xml", settings)
while reader.Read()
end while
|
上記を実行したところ、期待した動作をしました。
.NETでのリソースの概念を初めて知り、大変勉強になりました。
どうもありがとうございました。
|