Как удалить комментарии из XML с помощью модуля Twig - PullRequest
4 голосов
/ 15 ноября 2011

Я использую модуль XML :: Twig для удаления всех комментариев из файла XML. Пример файла может быть -

<?xml version="1.0" encoding="UTF-8"?>
<Node_A>
node A content 1
<!-- One Line Comment A1-->
<![CDATA[this portion within the two comments is being
REMOVED which is not the intention]]>
<!-- Two Line Comment
Two Line Comment-->
node A content 3
<!-- Two Line Comment
Two Line Comment-->
<![CDATA[this portion within the two comments is being
REMOVED which is not the intention]]>
<!-- Two Line Comment
Two Line Comment-->
<![CDATA[
this portion is fine]]>

<Node_B> node B content
<Node_C> node c content
</Node_C>
<!-- One Line Comment -->
some data one
<!-- Multi  Line Comment
Line 3Comment
1Line Comment
2Line Comment
Line 5Comment
Line Comment-->
some data again two 
<!-- Multi  Line Comment
Line 3Comment
Line 5Comment
Line Comment-->

few more
</Node_B>

</Node_A>

Я использовал скрипт как -

#!/usr/bin/perl 

use strict;
use warnings;
use XML::Twig;
my $infile = 'demo.xml';
my $twig = XML::Twig->new (comments => 'drop', pretty_print => 'indented')->parsefile($infile);
$twig->print ();

Этот скрипт удаляет часть "CDATA" в двух комментариях что не является моим намерением. Выход приходит как -

<?xml version="1.0" encoding="UTF-8"?>
<Node_A>
node A content 1

<![CDATA[
this portion is fine]]><Node_B> node B content
<Node_C> node c content
</Node_C>

some data one

some data again two 


few more
</Node_B></Node_A>

Что я должен добавить, чтобы сохранить все части CDATA и другие вещи, как есть, просто чтобы удалить комментарии?

Заранее спасибо.

1 Ответ

4 голосов
/ 15 ноября 2011

Когда я запускаю ваш сценарий с файлом demo.xml, который вы опубликовали, я получаю вывод:

<?xml version="1.0" encoding="UTF-8"?>
<Node_A>
node A content 1

<![CDATA[this portion within the two comments is being
REMOVED which is not the intention]]>

node A content 3

<![CDATA[this portion within the two comments is being
REMOVED which is not the intention]]><![CDATA[
this portion is fine]]><Node_B> node B content
<Node_C> node c content
</Node_C>

some data one

some data again two


few more
</Node_B></Node_A>

Что мне подходит.Я подозреваю, что у вас есть ошибочная версия XML :: Twig (или XML :: Parser , от которой это зависит).Я использую Perl 5.14.2, XML :: Twig 3.35 и XML :: Parser 2.41.

...