Экранирование "<" в сгенерированном Perl XML - PullRequest
0 голосов
/ 05 марта 2011

Мне нужно сгенерировать вывод XML с использованием кода Perl.Я пытаюсь не использовать какие-либо библиотеки, так как это очень простой временный XML, который используется на следующем этапе процесса.

Через мой Perl-код мне нужно было написать что-то вроде "url <a href="http://www.123.42" rel="nofollow">http://www.123.42</a> 1345&4686=userid:fs/fsfsf", что привело кошибка синтаксического анализатора и следующий вывод XML:

<text>url http://www.123.42 1345&4686=userid:fs/fsfsf  </text>

Итак, я попытался написать "url \<![CDATA[<http://www.123.42 1345&4686=userid:fs/fsfsf]\>", но это также привело к ошибке синтаксического анализатора и следующему выводу:

<text>URL &lt;![CDATA[http://www.123.42 1345&4686=userid:fs/fsfsf]&gt;</text>

I 'я хотел бы получить это:

<text>URL <![CDATA[http://www.123.42 1345&4686=userid:fs/fsfsf]></text>

Как я могу заставить XML экранировать символ "<"? </p>

Ответы [ 4 ]

5 голосов
/ 05 марта 2011

Вы уверены, что ваша ошибка не связана с символом амперсанда &? Попробуйте заменить его на &amp;

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

1 голос
/ 05 мая 2011

это не идеально, но это начало:

my $rss = XML::RSS->new();
my @lines = split("\n",$content);
foreach(@lines){
    s/(\S+)<(.*<\/\S+>)$/$1&#x3c;$2/g;
    s/^(<.*>.*)>(.*<\/\S+>)$/$1&#x3e;$2/g;
}
$content = join("\n",@lines);

регулярное выражение может быть лучше.

1 голос
/ 05 марта 2011
& is replaced by &#x26;
< is replaced by &#x3c;
> is replaced by &#x3e;
0 голосов
/ 02 октября 2013

Три человека сказали «использовать библиотеку», но ни один из них не ответил на вопрос, демонстрирующий, как можно использовать библиотеку для этой проблемы. Вот почему все так ненавидят XML, потому что библиотеки безумно громоздки и непригодны.

sub make_cdata
{
        my $x = shift;
        $x =~ s{]]>}{]]]]><![CDATA[>}g;
        return( "<![CDATA[$x]]>" );
}

Это ужасно уродливый XML.

Я дам еще лучший ответ, используйте JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...