Обернуть 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;
Другие вопросы по тегам