[ PHP ] XML を XSD で検証して詳細な結果を得る ( libxml_get_errors )

Pocket

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

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>