javascript - xml Twig : output unescaped text

标签 javascript xml perl xml-twig

我正在使用 Perl 的 XML::Twig 模块将 XML 转换为 (X)HTML。我需要输出一个如下所示的 Javascript 元素:

<script type="text/javascript">window.onload = function(){for(i = 1; i < 5; i++)collapse("tbl" + i);}</script>

由于脚本包含未经 XML 批准的“<”,当我调用 $node->set_text($code); 时,它被转义为“<”,这破坏了它.如何在不转义的情况下输出文本?如果那不可能或不好,我该如何解决?

最佳答案

如果您希望 XHTML 格式正确,您仍然必须转义“<”。这当然是 Javascript 不喜欢的。

所以解决方案是将脚本放在 CDATA 部分中,您可以在 XML::Twig 中通过为元素提供标签 '#CDATA'

以下是创建 CDATA 部分的方法:

perl -MXML::Twig -E'say XML::Twig::Elt->new( script)->set_cdata( "a<b")->sprint'
# <script><![CDATA[a<b]]></script>

如果您想将所有脚本包装在 CDATA 中,请按以下步骤操作:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Twig;

XML::Twig->new( twig_roots => { script => sub { if( my $s= $_->text) { $_->set_cdata( $s); }
                                                $_->print;
                                              },
                              },
                 twig_print_outside_roots => 1,
              )
          ->parsefile( $ARGV[0]);

这只会包装本地脚本,不会对已经包装的脚本进行双重包装。

关于javascript - xml Twig : output unescaped text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8132089/

相关文章:

java - Java 5 中的线程安全 XML 验证

java - 使用 xinclude 标签将多个 XML 文件加入到单个文件中

perl - 如何更改 MakeMaker 的默认 CFLAGS

arrays - 如何在 Perl 中按列对数组或表进行排序?

javascript - 登录 Python 和 Django 应用程序时本地服务器出现错误

javascript - 使用 Javascript 从弹出窗口中删除地址栏

javascript - 如何在 Yii javascript 中使用复选框隐藏或显示文本字段

xml - 传输编码对 XML 编码和字符引用的影响

perl - 在 DBIx::Class 中注入(inject)关系

javascript - 如何仅使用 javascript 设置事件导航项?