- PR -

プロジェクト内のスキーマを使用したXMLの検証について

1
投稿者投稿内容
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でのリソースの概念を初めて知り、大変勉強になりました。
どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)