2012-02-09 64 views
0

我写了一个小脚本,它解析XML文件,删除了一些多余的元素,并写入休息回使用$xml->print_to_file();一个新的XML文件。Perl的XML ::嫩枝不逃避双引号

一切工作正常,但标签的文本内部的双引号,已经逃脱了"是正常的双引号了。我没有找到类似于escape_gt的配置来防止此行为。有没有这样的配置或其他方式来保持双引号逃脱?

我的树枝的配置是这样的:

my $xml = XML::Twig->new(
    twig_handlers => { 
     label => \&purge_file 
    }, 
    pretty_print => 'indented', 
    output_encoding => 'utf-8', 
    escape_gt => 1 
); 
+0

它为什么重要?除了被分隔用双引号'“'和'"里面的属性值'的意思是完全一样的东西(除了一个需要500个%以上字节这样做)。 – Quentin 2012-02-09 09:36:19

+1

无论是双引号,也不是大于需要进行转义你。只需要在属性值中使用双引号[_if_属性值是双引号,并且比在a]之后更大]]:'是CDATA段定界符的结尾,并且由于某些原因,spec禁止它在所有其他情况。 – mirod 2012-02-09 13:59:11

回答

7

没有理由逃避XML文本引号。双引号只需在用双引号引用的属性值中转义,我相信你会发现XML :: Twig转义了这些。


...但它可以通过操心XML ::嫩枝的胆量:

XML::Twig::Elt::set_replaced_ents(qq{&<>"}); # "&" needs to be first. 

我建议避免使用。

+0

哦...好,我认为这将关系在某些情况下...不管怎样,谢谢。 – Demnogonis 2012-02-09 09:50:21

+1

更新的答案,包括解决无妨。 – ikegami 2012-02-09 09:57:21

+1

我建议对这个呢!(但良好的找到反正) – mirod 2012-02-09 13:55:33