5

我有两个文件:

  • 示例 XML 文件。
  • 带有架构的 .xsd 文件,上述 XML 文件必须遵守该文件。

为了根据架构验证 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]:元素“标题”:不需要此元素。预期是(路由)

我故意搞砸了我的 XML 文件,只是想看看 $dom->schemaValidate 是如何处理它的。显然,我不希望 PHP 在 XML 不符合架构时将警告消息吐出到页面上。相反,我希望我的应用程序能够解决这个问题。我在这里忽略了什么吗?

4

1 回答 1

8

你必须打电话

libxml_use_internal_errors(true);

在创建新的 DOMDocument() 以抑制警告并开始将 XML 解析错误收集到可通过 libxml_get_errors() 访问的内部结构之前。

于 2012-09-11T11:23:09.580 回答