私は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 が警告メッセージをページに吐き出すのは望ましくありません。代わりに、アプリにそれを処理してもらいたいです。ここで何かを見落としていますか?