Вы можете XML :: Liberal , который с радостью примет этот сломанный XML.Это может также сломать ваш XML другими способами, так что покупатель остерегается!
Поскольку это подкласс XML :: LibXML, вы можете использовать его вместо XML :: LibXML, но я бы не стал этого делать.Вместо этого у меня будет первый проход, где вы преобразуете свой квази-XML в правильный XML (и вы можете проверить его), а затем будете использовать обычные инструменты XML для остальной части вашей обработки (хотя, вероятно, не XML :: Simple, см. Предупреждение вдокументы модуля).
Преобразователь может быть простым:
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Liberal;
my $parser = XML::Liberal->new('LibXML');
my $doc = $parser->parse_file( 'broken_xml.xml');
print $doc->toString;
Понимать, что это опасное решение, используя модуль, который находится в альфа-состоянии и не былпотрогал в 6 лет.Так что он определенно не может быть использован как часть производственной системы.
Реальное решение состоит в том, чтобы получить ввод в виде реального (правильно сформированного) XML.Это возможно, голые &
в URL могут быть заменены либо &
, либо ;
, но для этого следует использовать инструменты HTML, а не XML.Или позор вашего провайдера посылать вам настоящий XML.
Между тем, XML :: Liberal может быть частью временного решения.