ここでは、スキーマ定義ファイル(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 ファイルのファイル名や行数がリターンされる