У меня есть XML-документ из внешнего источника, который мне нужен разбор каждый день снова и снова с помощью XML::Simple
perl
. Мой скрипт работает от crontab, и он отлично работает, если XML-документ здорова. Но я получаю сообщение об ошибке и умереть, если документ не действует, что-то вроде этого:Perl: как анализировать недопустимый XML-документ?
junk after document element at line 740774, column 0, byte 36355798 at /usr/local/lib/perl/5.18.2/XML/Parser.pm line 187.
Я нашел эту строку в документе XML и это выглядит следующим образом:
<item>
<element1>value1</element1>
<element2>value2</element2>
value3</element3>
<element4>value4</element4>
</item>
Могу ли я разобрать этот неправильный документ без смерти? Может быть, отбросить этот элемент из анализатора с предупреждением (и не умереть!) Или каким-то образом игнорировать ошибки?
Нет, вы не можете разобрать неверный XML. Вам нужно убедить тех, кто создает данные, чтобы сделать это правильно, или исправить их самостоятельно, прежде чем обрабатывать их. Всегда ли ошибки одинаковы? – Borodin
нет, они переменные ... Я думаю, что это исходит от разработчиков исходной системы. Если они ошибаются, я получаю неверный XML. – netdjw
Не думайте об этом как XML. Подумайте об этом как проприетарный синтаксис, изобретенный составителем. Напишите грамматику для этого синтаксиса, если нужно, обратное проектирование, а затем напишите парсер для этой грамматики. Дорогой, но вполне выполнимый. Если вы хотите более дешевый вариант, убедите поставщика принять XML: использование стандартов экономит все деньги. –