2013-07-02 74 views

回答

1

望着code

my $xs = XML::Simple->new(KeepRoot => 1, KeyAttr => 1, ForceArray => 1); 
$xs->XMLout($filename, escape_value(`'`')); // but this is not working 
my $data = $xs->XMLin($filename); 

感谢,看来该escape_value方法接受一个字符串,并返回返回字符串在进行以下替换:

  • >>
  • <&lt;
  • &&amp;
  • "&quot;

它甚至不操纵该对象的结构。如果你直接调用它,你只是这样做:

my $string = '"Remove quotes" & <entities> quotes'; 
my $encoded_string = $self->escape_value("$string"); 
say $encoded_string; #&quot;Remove quotes&quot; &amp; and &lt;entities&gt; quotes 

哎呀,为什么还要用面向对象的烦恼呢?

my $string = '"Remove quotes" & <entities> quotes'; 
my $encoded_string = XML::Simple::escape_value("$string"); 
say $encoded_string; #&quot;Remove quotes&quot; &amp; and &lt;entities&gt; quote 

它看起来像什么,这个子程序由XMLOut本身称为每当选项NoEscape或者未设置或设置为0

在代码的第636行中,XMLOut方法正在调用value_to_xml方法。这将数据结构传递给XMLOut并创建一个XML文本。然后value_to_xml方法调用行1431中的escape_string方法。

1

U + 000C在XML中不允许。

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

甚至没能逃脱。

使用字符引用引用的字符必须匹配生产Char

+0

这就是......嗯。有趣。那么,base64? :) – hobbs

+0

@hobbs,这是一个选项。您也可以使用更适合二进制数据的格式。 – ikegami

相关问题