Есть ли способ получить XML::Simple output CDATA?

Если я нахожусь в системе, где установлен только XML::Simple, и я читаю базу данных, чтобы вывести XML-представление некоторых из них, и некоторые из этих данных имеют HTML-код, который должен быть окружен тегом CDATA. .. это возможно?

Я действительно не хочу прыгать через необходимые обручи, чтобы установить новый модуль, но если это невозможно с XML::Simple, какой модуль вы бы порекомендовали?


person Dan Goodspeed    schedule 24.02.2015    source источник
comment
XML::LibXML и XML::Twig являются популярным выбором, и оба дают вам гораздо больше контроля, чем XML::Simple.   -  person TobyLL    schedule 24.02.2015
comment
Вы уверены, что вам нужно вывести разделы CDATA? Для любого (разумного) XML-процессора не должно иметь никакого значения, находится ли содержимое в разделе CDATA или закодировано с использованием сущностей.   -  person mirod    schedule 24.02.2015
comment
@mirod - я спросил компанию, которая будет выполнять чтение выходного XML-файла, о некоторых узлах, содержащих HTML-контент, и они сказали, просто убедитесь, что содержимое узла ‹text› заключено в CDATA. Таким образом, мы можем импортировать их как есть... вот где я. Возможно, они смогут справиться с этим закодированным. Я должен спросить. Спасибо.   -  person Dan Goodspeed    schedule 24.02.2015
comment
«Я действительно не хочу прыгать через все необходимые обручи, чтобы установить новый модуль» Я подозреваю, что вы просто не устанавливали модуль раньше. Это должно быть так же просто, как cpan install XML::Twig в командной строке.   -  person Borodin    schedule 24.02.2015
comment
XML::Simple прекрасно подходит для чтения XML. XML::Simple совершенно бесполезен при написании XML (для чтения чем-то другим, кроме XML::Simple).   -  person ikegami    schedule 24.02.2015
comment
На самом деле, это так же просто, как cpan XML::Twig.   -  person ikegami    schedule 24.02.2015
comment
@Borodin - я попробовал установку cpan, и она работала около 10 минут, но завершилась тем, что проверка линии make вернула плохой статус, не будет устанавливаться без принудительной установки.   -  person Dan Goodspeed    schedule 24.02.2015
comment
@DanGoodspeed: мы не можем сказать, что пошло не так, не видя полный журнал сборки. Можете ли вы разместить его на pastebin и опубликовать ссылку на него?   -  person Borodin    schedule 24.02.2015
comment
@Borodin - Готово.   -  person Dan Goodspeed    schedule 24.02.2015
comment
Возможно, вы найдете готовый пакет для вашей ОС. Однако ваша версия Perl довольно старая. Похоже, предварительные требования не загружаются?   -  person Sobrique    schedule 24.02.2015
comment
Хорошо, это не проблема. Только два теста из 107 завершились неудачно. Первый связан с обработкой объекта HTML &Amp; (который должен быть &amp), а второй связан с двусторонней обработкой данных XML с помощью инструкции DOCTYPE. Вы должны быть в порядке при установке с этими проблемами, если вы помните о них. Просто cpan -f XML::Twig принудительно произведет установку, и все будет готово.   -  person Borodin    schedule 24.02.2015
comment
@Borodin Итак, я только что сделал cpan -f XML::Twig, как вы сказали, чтобы принудительно установить, и в конце процесса все еще говорилось, что make test вернул неверный статус, не будет устанавливаться без принудительной установки и не устанавливался. Есть ли другой способ принудительной установки?   -  person Dan Goodspeed    schedule 27.02.2015


Ответы (1)


Это будет немного неполным. Потому что это будет зависеть от ваших особенностей ввода/вывода.

Мне нравится XML::Twig в качестве альтернативы XML::Simple. В документах для XML::Simple у вас есть:

Использование этого модуля в новом коде не рекомендуется. Доступны и другие модули, которые обеспечивают более простой и согласованный интерфейс.

В документации для XML::Twig у вас есть (подробнее читайте ссылку выше, она воспроизведена для удобства):

Чтобы создать элемент foo, содержащий раздел CDATA:

my $foo= XML::Twig::Elt->new( '#CDATA' => "content of the CDATA section")
                              ->wrap_in( 'foo');

Атрибут '#CDATA' создаст содержимое элемента как CDATA:

my $elt= XML::Twig::Elt->new( 'p' => { '#CDATA' => 1}, 'foo < bar');

создает элемент

<p><![CDATA[foo < bar]]></>

Я думаю, это должно охватывать ваши потребности?

person Sobrique    schedule 24.02.2015