Обернуть XML в CDDATA в Embperl
У меня есть следующий код XML ($xml
) которые должны отображаться на странице:
<?xml version="1.0" encoding="UTF-8"?>
<Contact name="test" course="maths">
</Contact>
При отображении страницы я получаю сообщение об ошибке "Ошибка синтаксического анализа XML: XML или текстовое объявление не в начале объекта" вместо отображения XML.
Я пытался удалить строку - <?xml version="1.0" encoding="UTF-8"?>
, он отображается правильно.
Моя проблема заключается в следующем: я не всегда могу выполнить вышеуказанный шаг, так как в будущем будет другой формат. В качестве постоянного решения я хочу обернуть этот XML в CDDATA и попробовал в Perl, как:
$modified_xml = '<![CDATA['.$xml.']]>;
и это отображает ошибку как:
XML Parsing Error: syntax error
<![CDATA[<?xml version="1.0" encoding="UTF-8"?><Contact name="test" course="maths"></Contact>]]>
1 ответ
<?xml version="1.0" encoding="UTF-8"?>
Это особый случай - это декларация XML. Он должен быть на отдельной строке, и (если присутствует) должен быть первой строкой. Это не часть вашего XML.
Так что нет, вы не можете вставить его в CDATA
как это. Это не сработает.
Ваша ошибка там - предполагает, что это "не в начале сущности", что обычно означает, что вы отклонились от пустых строк.
Например:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
my $xml = '
<?xml version="1.0" encoding="UTF-8"?>
<Contact name="test" course="maths">
</Contact>';
XML::Twig -> parse ( $xml );
Ошибки с:
XML or text declaration not at start of entity at line 2, column 0, byte 1
Но:
my $xml = '<?xml version="1.0" encoding="UTF-8"?>
<Contact name="test" course="maths">
</Contact>';
XML::Twig -> parse ( $xml );
Не имеет.
Могу я предложить в качестве вашего "исправления" - сначала получите действительный XML. Но второе:
$xml =~ s/\A\s*//gms;