2011-08-28 6 views
5

私はXML文字列を読み込み、スキーマに対して検証するための簡単な関数を用意しました。与えられた井戸がXMLを形成すると、それは完全に動作します。PHP XML検証で合格すると致命的な例外が発生する

しかし、私はxml構文自体を酷くすると、phpが致命的なエラーをスローし、スクリプトを強制終了します。私はloadXML関数の戻り値をチェックしています。単純なtrue/falseが必要です。 xmlがダーティであれば、loadXML()は失敗し、単に検証の失敗を返すことができます。私は空のエラーハンドラを設定しようとしましたが、それでもスクリプトを強制終了します。

アイデア?エラーや何かをダウングレードする必要がありますか?

参照用

含まれるコード(PHP):

function __maskerrors(){}; 

function ValidateImageXML($xml_string) 
{ 
    /* Parse XML data string into DOM object */ 
    $xdoc = new DomDocument; 

    /* Calculate schema location */ 
    $schema = dirname(realpath(__FILE__)); 
    $schema.= "/image-xml-schema.xsd"; 

    /* Mask any errors */ 
    set_error_handler('__maskerrors'); 

    /* Parse xml string, check for success */ 
    if($xdoc->loadXML($xml_string)) 
    { 
     /* Validate xml against schema */ 
     if($xdoc->schemaValidate($schema)) 
     { 
      /* Valid XML structure & valid against schema, return true */ 
      return true; 
     } 
     else 
     { 
      /* Valid XML structure, but invalid against schema. Return false */ 
      return false; 
     } 
    } 
    else 
    { 
     /* Invalid XML structure, return false */ 
     return false; 
    } 

    /* Stop masking errors */ 
    restore_error_handler(); 
} 
+0

致命的なエラーのメッセージは何ですか? – hakre

答えて

4

libxml_use_internal_errors(true); 
$xdoc->loadXml($yourXml); 
libxml_clear_errors(); 
return $xdoc->schemaValidate($schema) 

で試してみてください。これは、のlibxmlエラーを無効にし、必要に応じてユーザーがエラー情報を取得することができます(またはそれらをクリア)

を参照http://.php.net/manual/en/book.libxml.php

+0

完璧、ありがとう – Oliver

関連する問題