2015-12-18 2 views
1

Мне нужно прочитать огромную базу данных xml-файлов, используя XML :: Simple.Устранить ошибку в perl

my $xml = XMLin("${file}", ForceArray => 1, KeyAttr => {}); 

Проблема в том, что некоторые из этих xml повреждены, и я хочу, чтобы моя программа удаляла их и продолжала работать. Я не смог найти способ уловить ошибку, исходящую от XMLin parser error : Start tag expected '<' not found

Любая идея?

+1

Посмотрите на команду Eval – Jens

+0

Я пытался, но 'если (Eval (XMLin (" $ {файл} ", ForceArray => 1, KeyAttr => {}))' не работает либо – Arcyno

+1

'eval' не возвращает' true/false', если он сработал - он возвращает ... независимо от того, что 'eval' вернется. Вы нужно ловить '$ @' за результат eval. – Sobrique

ответ

3

Прежде всего, пожалуйста, не используйте XML::Simple - это очень неприятно. Why is XML::Simple "Discouraged"?

Чтобы устранить вашу точку, хотя - сломанный XML должен быть фатальным для синтаксического анализатора - он должен die (по дизайну). То, как вы справиться с этим в perl является завернуть его в eval блоке, и поймать [email protected], чтобы увидеть, если это не удалось:

my $xml = eval { XMLin("${file}", ForceArray => 1, KeyAttr => {}); }; 
warn [email protected] if [email protected]; 
+2

Я не знал о XML: просто. Спасибо за это. – Arcyno

+0

Вы не первый, кого нужно поймать. Он говорит просто, но он лжет. – Sobrique