在保留DOM的同时解析XML时,如何获取详细的错误信息?

时间:2009-06-19 08:59:28

标签: php xml domdocument

我正在构建一个Web表单,我的站点上的管理员可以将XML添加到textarea并将其提交以存储在数据库表中,但我对解析XML的最佳方法感到困惑。

PHP脚本需要解析XML,如果有任何解析错误,它应该将解析器停止的错误消息和行/列返回给提交表单的管理员。在解析之后,它需要访问DOM以使用XPath对节点和属性的存在进行多次检查。

如果我使用xml_create_parser()xml_parse(),如果返回false,我可以获得我所追求的详细错误信息。但是,在解析之后,我无法访问XML的DOM。如果我使用DOMDocument::loadXML(),根据我的阅读,它不会抛出解析错误的异常,只是将它们输出到PHP日志。

如果我第一次尝试xml_parse()然后如果成功,运行DOMDocument::loadXML()会不会是一个很好的性能影响,考虑到文件大多小于10KB而少数是10-20KB?有谁知道更好的方法吗?

1 个答案:

答案 0 :(得分:6)

您可以启用libxml_use_internal_errors然后-if DOMDocument :: load()失败 - 使用libxml_get_errors()查询详细的错误消息

<?php
$xml = '<a>
  <b>xyz</b>
  <c>
</a>';

libxml_use_internal_errors(true);
$doc = new DOMDocument;
if ( !$doc->loadxml($xml) ) {
  $errors = libxml_get_errors();
  var_dump($errors);
}