load_xml libxml perl hash xml-parsing xml-serialization hashref

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">&lt;a href=&quot;https://support.netapp.com/info/communications/ECMP1110462.html &quot; target=&quot;_blank&quot;&gt; CPC-0705-02 &lt;/a&gt;</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 &apos;on&apos; 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">&lt;a href=&quot;https://support.netapp.com/info/communications/ECMP1110462.html &quot; target=&quot;_blank&quot;&gt; CPC-0705-02 &lt;/a&gt;</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