2

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

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

如果我使用xml_create_parser()and xml_parse(),如果返回 false ,我可以获得详细的错误信息。但是,解析后我无法访问 XML 的 DOM。如果我使用DOMDocument::loadXML(),从我读过的内容来看,它不会为解析错误抛出异常,它只是将它们输出到 PHP 日志。

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

4

1 回答 1

6

您可以启用libxml_use_internal_errors然后 -if DOMDocument::load() failed- 使用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);
}
于 2009-06-19T09:02:11.270 回答