5

私は2つのファイルを持っています:

  • サンプル XML ファイル。
  • 前述の XML ファイルが準拠する必要があるスキーマを含む .xsd ファイル。

スキーマに対して XML ファイルを検証するために、私は以下を使用しています。

$dom = new DOMDocument();

//$this->xmlstr; is my XML file after being loaded into a string.
$dom->loadXML($this->xmlstr); 

//$xsd_file is definitely my xsd file.
if(!$dom->schemaValidate($xsd_file)){
     $errors = libxml_get_errors(); //supposed to give back errors?
     var_dump($errors); //debugging - shows: array empty
}

ただし、XML ドキュメントがスキーマの規則に従っていない場合は常に警告エラーが発生します。

警告: DOMDocument::schemaValidate() [domdocument.schemavalidate]: 要素 'Header': この要素は想定されていません。期待されるのは (ルーティング)

$dom->schemaValidate が実際にそれを処理する方法を確認するためだけに、意図的に XML ファイルを台無しにしてしまいました。明らかに、XML がスキーマを満たしていない場合に PHP が警告メッセージをページに吐き出すのは望ましくありません。代わりに、アプリにそれを処理してもらいたいです。ここで何かを見落としていますか?

4

1 に答える 1

8

電話する必要があります

libxml_use_internal_errors(true);

警告を抑制し、libxml_get_errors() を介してアクセス可能な内部構造に XML 解析エラーの収集を開始するために、新しい DOMDocument() を作成する前に。

于 2012-09-11T11:23:09.580 に答える