.Net Framework 4.0のExtenstions.GetSchemaInfo メソッド (XElement)に関する Microsoft の MSDN ドキュメントについて質問があります。
中から抜け道があるか知りたい
Private Sub DumpInvalidNodes(ByVal el As XElement)
If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then
...
End If
End Sub
無効なノードの ValidationEventArgs.Message を取得するコード。この例は、GrandChild1、GrandChild2 のように XML ノードに番号を付けた場合にうまく機能します。どの無効なノードが検証エラーを生成しているかをサイトごとに判断できます。しかし、番号付けされたノードのない XML がある場合、たとえば
<Root>
<Child>
<GrandChild>AAA</GrandChild>
<GrandChild>ZZZ</GrandChild>
<GrandChild>ZZZ</GrandChild>
</Child>
</Root>
次のような出力が得られます。
(1)Validating doc1 ...
(2)The 'GrandChild' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed.
(3)The 'GrandChild' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed.
(4)doc1 did not validate
(5)Invalid Element /Root
(6)Invalid Element /Root/Child
(7)Invalid Element /Root/Child/GrandChild
(8)Invalid Element /Root/Child/GrandChild
行 (7) が行 (2) の ErrorMessage を参照していることを伝える方法が必要でした。
この記事が示すように、XSD 検証を実行している XML ドキュメントがあり、ValidationEventArgs.Message を解析して、複雑なデータ型のよりユーザー フレンドリなメッセージにしたいと考えました。DumpInvalidNodes() メソッドでこれを行いたいのは、無効なノードにアクセスでき、ユーザーが検証の問題を見つけて修正するために使用できるノードから他の情報 (ID など) を取得できるためです。