Perl XML :: Twig – 在属性中及其周围保留引号

前端之家收集整理的这篇文章主要介绍了Perl XML :: Twig – 在属性中及其周围保留引号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有选择地修复一些元素和属性.不幸的是,我们的输入文件包含单引号和双引号属性值.此外,某些属性值包含引号(在值内).

使用XML :: Twig,我看不出如何保留属性值周围存在的任何引号.

这是示例代码

use strict;
use XML::Twig;

my $file=qq(<file>
  <label1 attr='This "works"!' />
  <label2 attr="This 'works'!" />
</file>
);

my $fixes=0; # count fixes
my $twig = XML::Twig->new( twig_handlers => { 
                             '[@attr]' => sub {fix_att(@_,\$fixes);} },# ...
                           keep_atts_order => 1,keep_spaces => 1,keep_encoding => 1,);
#$twig->set_quote('single');

$twig->parse($file);
print $twig->sprint();

sub fix_att {
  my ($t,$elt,$fixes) =@_;
  # ...
}

上面的代码返回label1的无效XML:

<label1 attr="This "works"!" />

如果我添加

$twig->set_quote('single');

然后我们会看到label2的XML无效:

<label2 attr='This 'works'!' />

是否有保留现有报价的选项?或者有更好的方法来选择性地固定树枝?

解决方法

你有什么特别的理由使用keep_encoding吗?如果没有它,报价就会被正确编码.

keep_encoding用于保留文件的原始编码,但还有其他方法可以执行此操作.它主要用于5.8之前的时代,当时编码不像现在那样顺畅.

猜你在找的Perl相关文章