“逃跑”<&引用;在Perl生成的XML中

“逃跑”<&引用;在Perl生成的XML中,xml,perl,Xml,Perl,我需要使用Perl代码生成XML输出。我尽量不使用任何库,因为它是非常简单的临时XML,在这个过程中的另一个步骤会用到它 通过我的perl代码,我需要编写类似于“url 1345&4686=userid:fs/fsfsf”的东西,这会导致解析器错误,并生成以下XML输出: <text>url http://www.123.42 1345&4686=userid:fs/fsfsf </text> urlhttp://www.123.42 1345&4686=us

我需要使用Perl代码生成XML输出。我尽量不使用任何库,因为它是非常简单的临时XML,在这个过程中的另一个步骤会用到它

通过我的perl代码,我需要编写类似于
“url 1345&4686=userid:fs/fsfsf”
的东西,这会导致解析器错误,并生成以下XML输出:

<text>url http://www.123.42 1345&4686=userid:fs/fsfsf  </text>
urlhttp://www.123.42 1345&4686=userid:fs/fsf
因此,我试图编写
“url\”
,但这也导致了解析器错误和以下输出:

<text>URL &lt;![CDATA[http://www.123.42 1345&4686=userid:fs/fsfsf]&gt;</text>
URL![CDATA[http://www.123.42 1345&4686=userid:fs/fsf]
我想得到这个:

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

如何使XML转义为“您确定错误不是由符号和字符
&
引起的吗?请尝试将其替换为
&;

对于其他内容,请发布显示问题的最小代码。

&替换为&;
& is replaced by &#x26;
< is replaced by &#x3c;
> is replaced by &#x3e;
<替换为<; >替换为>;
这并不完美,但只是一个开始:

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);
my$rss=XML::rss->new();
my@lines=split(“\n”,$content);
foreach(@行){
s/(\s+)(.*)$/$1和#x3e;$2/g;
}
$content=join(“\n”,@行);
正则表达式可能更好。

有三个人说“使用库”,但没有一个人回答了如何使用库来解决这个问题的问题。这就是为什么每个人都如此讨厌XML,因为库极其繁琐且无法使用

sub make_cdata
{
        my $x = shift;
        $x =~ s{]]>}{]]]]><![CDATA[>}g;
        return( "<![CDATA[$x]]>" );
}
sub make\u cdata
{
我的$x=班次;
$x=~s{]]>}{]]]]>}g;
返回(“”);
}
这是一个丑陋得令人震惊的XML


我会给出一个更好的答案,使用JSON。

使用一个库。您将花费更多的开发时间,而节省下来的时间将是值得的。看起来您的CDATA括号不平衡。它应该是这样的:故事的寓意是…使用一个库;-)(+1)错误实际上来自“&“这就是我试图将其放入Cdata部分的原因。是否有其他建议的方式将URL显示为文本?正如我在回答中所说:
&除非您可能还需要更换“或者‘在属性中,大多数情况下实际上不需要替换>,因此使用库可能是一个好主意。我同意,但他/她正试图避免使用库,我不想评判他/她。:-)如果他/她只需要替换URL,那么替换&可能足以避免解析错误。