Как я могу получить подробную информацию об ошибке при разборе XML при сохранении DOM? - PullRequest
2 голосов
/ 19 июня 2009

Я создаю веб-форму, в которой администраторы моего сайта могут добавлять XML в текстовую область и отправлять ее для хранения в таблицу базы данных, но я немного запутался в том, что такое лучший способ анализа XML.

Скрипт PHP должен проанализировать XML, и если есть какие-либо ошибки синтаксического анализа, он должен вернуть сообщение об ошибке и строку / столбец, где анализатор остановился, администратору, который отправил форму. После анализа он должен получить доступ к DOM, чтобы выполнить несколько проверок на наличие узлов и атрибутов с использованием XPath.

Если я использую xml_create_parser() и xml_parse(), я могу получить подробную информацию об ошибке, которую я получаю, если возвращается false. Однако я не могу получить доступ к DOM XML после того, как проанализирую его. Если я использую DOMDocument::loadXML(), из того, что я прочитал, он не выдает исключений для ошибок разбора, он просто выводит их в журнал PHP.

Будет ли большой удар по производительности, если я сначала попробую xml_parse(), а затем, если это удастся, запустите DOMDocument::loadXML(), учитывая, что файлы в основном меньше 10 КБ, а несколько - 10-20 КБ? Кто-нибудь знает лучший способ?

1 Ответ

6 голосов
/ 19 июня 2009

Вы можете включить 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);
}
...