ここでは、スキーマ定義ファイル(xsd) を用いて XML ファイルの内容を検証し、その詳細な検証結果を取得するサンプルコードを掲載しています。
なお、xsd ファイル自体については言及していません。
スポンサーリンク
XML を XSD で検証し、詳細な検証結果を取得する
XML ファイルを XSD スキーマ定義ファイルで検証し、その詳細な検証結果を取得するサンプルです。エラーの詳細情報には、エラーメッセージやエラーの行数などが含まれます。
$xmlPath = 'path/to/file.xml';
$xsdPath = 'path/to/file.xsd';
// 内部エラー表示を行う
libxml_use_internal_errors(true);
$dom = new DOMDocument();
// XML ファイルをロードする
$ret = $dom->load($xmlPath);
// スキーマの検証を行う
if($dom->schemaValidate($xsdPath) === false) {
// エラー情報を取得する
$errors = libxml_get_errors();
foreach ($errors as $error) { // $error の型 : libXMLError
$code = $error->code; // エラーコード
$line = $error->line; // エラー箇所(行数)
$column = $error->column; // エラーが発生した列
$message = $error->message; // エラーメッセージ
$level = $error->level; // エラーレベル(LIBXML_ERR_WARNING LIBXML_ERR_ERROR LIBXML_ERR_FATAL)
$file = $error->file; // エラーファイル名(xml または xsd ファイル名)
}
// エラー情報をクリアする
libxml_clear_errors();
}
ポイント
- libxml_use_internal_errors 関数に true を指定する事前準備は必須
- エラーが発生した列(libXMLError::column)は、実装が不完全なため 0 が返されることがある(あてにしてはいけない)
- スキーマ定義ファイル(xsd)自体に異常がある場合は、xsd ファイルのファイル名や行数がリターンされる