perl - libxml - XML:: Dumper usando referencia de hash incorrecta en la salida
libxml perl (1)
Estoy tratando de replicar tu problema sin ningún éxito.
#!/usr/bin/perl -Tw
use strict;
use warnings;
use XML::Dumper;
my $eos = bless {
''info'' => ''<a href="https://support.netapp.com/info/communications/ECMP1110462.html " target="_blank"> CPC-0705-02 </a>'',
''count'' => ''48'',
''ASUP_id'' => ''AE20121117202086'',
''part'' => ''ESH2 - X5511A-RC, X5511-RC-C'',
''category'' => ''I/O Module'',
''EOS_date'' => ''06/02/2013'',
''severity'' => ''8''
}, ''EOSObject'';
my %data = (
''options_settings'' => {
''telnet.distinct.enable'' => {
''text'' => ''Option telnet.distinct.enable needs to be set to /'on/' as of
workaround for Bug 476803'',
''severity'' => ''7''
}
},
''EOS_details'' => { 338 => $eos }
);
print pl2xml( /%data );
El resultado de mi programa:
<perldata>
<hashref memory_address="0x253fb18">
<item key="EOS_details">
<hashref memory_address="0x2517e08">
<item key="338">
<hashref blessed_package="EOSObject" memory_address="0x24f9998">
<item key="ASUP_id">AE20121117202086</item>
<item key="EOS_date">06/02/2013</item>
<item key="category">I/O Module</item>
<item key="count">48</item>
<item key="info"><a href="https://support.netapp.com/info/communications/ECMP1110462.html " target="_blank"> CPC-0705-02 </a></item>
<item key="part">ESH2 - X5511A-RC, X5511-RC-C</item>
<item key="severity">8</item>
</hashref>
</item>
</hashref>
</item>
<item key="options_settings">
<hashref memory_address="0x2517688">
<item key="telnet.distinct.enable">
<hashref memory_address="0x2517598">
<item key="severity">7</item>
<item key="text">Option telnet.distinct.enable needs to be set to 'on' as of
workaround for Bug 476803</item>
</hashref>
</item>
</hashref>
</item>
</hashref>
</perldata>
Me inclino a pensar que hay algo con tu programa. :(
Estoy tratando de serializar la siguiente estructura de datos usando XML :: Dumper
''options_settings'' => {
''telnet.distinct.enable'' => {
''text'' => ''Option telnet.distinct.enable needs to be set to /'on/' as of
workaround for Bug 476803'',
''severity'' => ''7''
}
},
''EOS_details'' => {
''338'' => bless( {
''info'' => ''<a href="https://support.netapp.com/info/communications/ECMP1110462.html " target="_blank"> CPC-0705-02 </a>'',
''count'' => ''48'',
''ASUP_id'' => ''AE20121117202086'',
''part'' => ''ESH2 - X5511A-RC, X5511-RC-C'',
''category'' => ''I/O Module'',
''EOS_date'' => ''06/02/2013'',
''severity'' => ''8''
}, ''EOSObject'' ),
El problema es que cuando lo analizo en xml con XML: Dumper usa la misma dirección de memoria para 2 referencias hash separadas:
<item key="338">
<hashref blessed_package="EOSObject" memory_address="0x295b5758">
<item key="ASUP_id">AE20121117165273</item>
<item key="EOS_date">06/02/2013</item>
<item key="category">I/O Module</item>
<item key="count">48</item>
<item key="info"><a href="https://support.netapp.com/info/communications/ECMP1110462.html " target="_blank"> CPC-0705-02 </a></item>
<item key="part">ESH2 - X5511A-RC, X5511-RC-C</item>
<item key="severity">8</item>
</hashref>
</item>
</hashref>
<item key="options_settings">
<hashref memory_address="0x295b5320">
<item key="telnet.distinct.enable">
<hashref memory_address="0x295b5758">
</hashref>
</item>
</hashref>
</item>
Tenga en cuenta la memory_address = "0x295b5758".
Por lo tanto, al leer desde el archivo los puntos de referencia hash option_settings al objeto EOS: /
¿Es eso un error en XML :: Dumper o estoy haciendo algo mal? Usando el último XML :: Dumper 0.81
PD: Intenté reproducirlo fuera del script principal y funciona. Aún así, no puedo entender cómo se rompieron los datos en el guión principal. Este es el código donde se utiliza XML :: Dumper:
DEBUG("Before serialization: " . Data::Dumper::Dumper($result));
my $dump = new XML::Dumper;
my $dump_test = new XML::Dumper;
my $test_xml = $dump_test->pl2xml ($result);
DEBUG("After serialization in memory: " . Data::Dumper::Dumper($test_xml));
$dump->pl2xml( $result, $filename );
El resultado se imprime correctamente. "options_settings" son entradas separadas. En $ test_xml ya está mezclado con EOS_details