小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


Msxml2.DOMDocumentのloadメソッドを利用する際のエラー処理

以前、Msxml2.DOMDocumentを使ってVBScriptでXMLファイルを読み込む - 大人になったら肺呼吸 はてなブックマーク - Msxml2.DOMDocumentを使ってVBScriptでXMLファイルを読み込む - 大人になったら肺呼吸というエントリを書きました。

このとき、Msxml2.DOMDocumentのloadメソッドのエラー処理を以下のように書いていましたが、これではうまくエラー処理ができないことが分かりました。

' XMLファイルの読み込み
objXml.Load(xmlFile)
If Err.Number <> 0 Then
  WScript.Echo Err.Number
  WScript.Echo Err.Source
  WScript.Echo Err.Description
  WScript.Quit
End If
loadメソッドのエラー処理

loadメソッドでエラーが発生するパターンとしては、以下のパターンが考えられます。

  • ファイルが存在しない
  • ファイルがxmlとして正しい形式になっていない

ファイルが存在するかどうかは、FileSystemObjectを使えば調べることができます。次にxmlとして正しい形式になっていないファイルの場合ですが、このようなファイルをloadメソッドで読み込んだ場合、エラーが発生します。xmlファイルの解析処理でのエラーは、以下のように検出します。

2010.07.01追記

戻り値がtrueかfalseかでパースエラーが発生したかどうかを判断できるようです。

' XMLファイルの読み込み
Dim result
result = objXml.Load(xmlFile)
If Not result Then
  WScript.Echo objXml.parseError.errorCode
  WScript.Echo objXml.parseError.reason
  WScript.Echo objXml.parseError.line
  WScript.Echo objXml.parseError.linepos
  WScript.Echo objXml.parseError.filepos
  WScript.Echo objXml.parseError.srcText
  WScript.Echo objXml.parseError.url
  WScript.Quit
End If

parseErrorというオブジェクトにエラーコードやエラーの内容などが格納されているので、そちらを参照するようにします。parseErrorについては、以下のサイトが参考になります。

■ParseErrorオブジェクトのプロパティ

errorCode・・・エラー番号
reason・・・エラーの原因
line・・・エラーが生じたXML文書の行番号
linepos・・・エラーが生じたXML文書の行の、行頭からの位置
filepos・・・エラーが生じたファイルの先頭からの位置
srcText・・・エラーが生じた行の内容
url・・・エラーが生じたXML文書のURL
読み込みエラー内容の表示 はてなブックマーク - 読み込みエラー内容の表示

以下のエントリもあわせてどうぞ