2010-11-24 11 views
0

私は成功したXSDスキーマに対してXMLファイルを検証し、次のコードを持っている:XMLファイルのXSDエラーのファイル位置を取得するにはどうすればよいですか?

Try 

     Dim val As New Xml.XmlReaderSettings With {.ValidationType = ValidationType.Schema} 
     val.Schemas.Add(Nothing, "myvalidator.xsd") 

     Using reader = XmlReader.Create("myfile.xml", val) 
      While reader.Read 
      End While 
     End Using 

     Console.WriteLine("XML validation succeeded.") 

    Catch ex As Exception 
     Console.WriteLine("XML validation failed." & vbCr & vbLf & "Error Message: " & ex.Message) 
    End Try 

私が持つ大規模なXMLファイルを検証していたとき、私は取得していますサンプルエラーが

The element 'address' has invalid child element 'zip_code'. List of possible elements expected: 'address_line_2, address_line_3, city'. 

です数百人のメンバーがそれぞれ複数のアドレスを持っていますが、これは問題を特定するのに十分な情報ではありません。行番号やファイルの位置などの有用なデータを入手して、元のXMLファイルのどこで問題が発生しているかを知る方法はありますか?私は、XmlReaderがテキストリーダーと同じ方法でファイルを読み込んでいないことを認識しています.XMLはきれいにフォーマットされているか、1つの巨大な行になっている可能性があります。私はWhileループの中で何かをして問題がどこにあるのか知ることができるはずだが、私はそれをまだ見つけていないように思えるだろう。

答えて

1

まず、「ex.Message」は使用しないでください。これは、トップレベルの例外のテキストのみを表示します。代わりにex.ToString()を使用してください。

第2に、例外時にXmlReaderのプロパティを調べます。また、渡されたXmlExceptionのすべてのプロパティを注意深く見てください。それはLineNumberLinePositionのプロパティを持っています。

+0

パーフェクト。私は特定のエラータイプをトラップするのを忘れていたので、特定のXmlSchemaValidationExceptionハンドラではなくジェネリックExceptionハンドラのプロパティのみを調べていたので、LineNumberやLinePositionなどの余分なプロパティは表示されませんでした。必要。ありがとう! – gfrizzle

関連する問題