• Publicidad

Problema al convertir datos XML

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problema al convertir datos XML

Notapor caribesoft » 2007-12-20 14:51 @660

Hola Amigos Perlianos:

Tengo un problema algo extraño al recibir datos en XML, después de hacer un request a un ASP con LWP::UserAgent. Este es parte de mi script:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub get_basket {
    my $ua = LWP::UserAgent->new();
    my $xs = new XML::Simple();
    $ua->timeout(10);
    $ua->env_proxy;
    my $req = $ua->request('http://217.154.224.111/travelink/ExternalFunctions/basketcontents.asp?dbname=Travelly-Test-21Nov07&SessionId=93');
 if ($req->is_success) {
      my $respuesta = $xs->XMLin($req->content);
      print Dumper $respuesta;

    }else{
       print "<p>Server Error, please try later ...</p>";
       exit;
   }

} # fin de get_basket
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Al ejecutar esta rutina y revisarla con Dumper, la información viene "mal formada", esto es lo que recibo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$VAR1 = {
          'Basket' => {
                        'BasketItem' => {
                                          'MEAL optional' => {
                                                               'InfantQuotePrice' => '0',
                                                               'Supplementparentkey' => '88',
                                                               'UnitQuoteCost' => '0',
                                                               'Enddate' => '16/02/2008',
                                                               'UniqueId' => '111',
                                                               'Generic3' => {},
                                                               'ExchRate' => '1',
                                                               'ChildQuoteCost' => '350',
                                                               'UnitCurrencyCost' => '0',
                                                               'IsPricePerPerson' => '1',
                                                               'ShowTotal' => {},
                                                               'TourID' => '0',
                                                               'adulttax' => {},
                                                               'AdultQuotePrice' => '525',
                                                               'SupplierName' => {},
                                                               'SessionId' => '93',
                                                               'Markup' => '0',
                                                               'AdultCurrencyCost' => '350',
                                                               'ispackage' => '0',
                                                               'description' => {},
                                                               'TotalCost' => '700',
                                                               'ConvertedFromMisc' => '0',
                                                               'infanttax' => {},
                                                               'OriginalMarkupChild' => '50',
                                                               'Generic1' => 'SUPPLEMENT',
                                                               'TotalPrice' => '1050',
                                                               'arrivalTime' => {},
                                                               'UnitQuotePrice' => '0',
                                                               'AdultQuoteCost' => '350',
                                                               'IsCostPerPerson' => '1',
                                                               'ChildCurrencyCost' => '350',
                                                               'NumberofChildren' => '0',
                                                               'OriginalMarkupUnit' => {},
                                                               'ChildPrice' => '525',
                                                               'BasketLineType' => 'Extra',
                                                               'StartDate' => '09/02/2008',
                                                               'OriginalMarkupAdult' => '50',
                                                               'NumberOfInfants' => '0',
                                                               'CostCurrency' => 'usd',
                                                               'resort' => {},
                                                               'qty' => '1',
                                                               'InfantCurrencyCost' => '0',
                                                               'Generic4' => {},
                                                               'NumberofAdults' => '2',
                                                               'Generic2' => '0',
                                                               'InfantQuoteCost' => '0',
                                                               'childtax' => {},
                                                               'ComponentCode' => 'MEAL optional',
                                                               'SupplementParentType' => '1'
                                                             },
                                          'Las Brisas Acapulco' => {
                                                                     'InfantQuotePrice' => '0',
                                                                     'Supplementparentkey' => {},
                                                                     'UnitQuoteCost' => '1456',
                                                                     'Enddate' => '16/02/2008',
                                                                     'UniqueId' => '88',
                                                                     'Generic3' => 'Acapulco',
                                                                     'ExchRate' => '1',
                                                                     'ChildQuoteCost' => '0',
                                                                     'UnitCurrencyCost' => '1456',
                                                                     'IsPricePerPerson' => '0',
                                                                     'ShowTotal' => {},
                                                                     'TourID' => {},
                                                                     'adulttax' => {},
                                                                     'AdultQuotePrice' => '0',
                                                                     'SupplierName' => 'Las Brisas Acapulco',
                                                                     'SessionId' => '93',
                                                                     'Markup' => '0',
                                                                     'AdultCurrencyCost' => '0',
                                                                     'ispackage' => '0',
                                                                     'description' => 'Shared Pool Casita',
                                                                     'TotalCost' => '1456',
                                                                     'ConvertedFromMisc' => '0',
                                                                     'infanttax' => {},
                                                                     'OriginalMarkupChild' => {},
                                                                     'Generic1' => 'BB',
                                                                     'TotalPrice' => '3780',
                                                                     'arrivalTime' => {},
                                                                     'UnitQuotePrice' => '3780',
                                                                     'AdultQuoteCost' => '0',
                                                                     'IsCostPerPerson' => '0',
                                                                     'ChildCurrencyCost' => '0',
                                                                     'NumberofChildren' => '0',
                                                                     'OriginalMarkupUnit' => '159.61',
                                                                     'ChildPrice' => '0',
                                                                     'BasketLineType' => 'Accommodation',
                                                                     'StartDate' => '09/02/2008',
                                                                     'OriginalMarkupAdult' => {},
                                                                     'NumberOfInfants' => '0',
                                                                     'CostCurrency' => 'usd',
                                                                     'resort' => 'Acapulco',
                                                                     'qty' => '1',
                                                                     'InfantCurrencyCost' => '0',
                                                                     'Generic4' => {},
                                                                     'NumberofAdults' => '2',
                                                                     'Generic2' => 'Resort',
                                                                     'InfantQuoteCost' => '0',
                                                                     'childtax' => {},
                                                                     'ComponentCode' => 'HOT0000490000004',
                                                                     'SupplementParentType' => {}
                                                                   },
                                          'Las Brisas Jeep Rental' => {
                                                                        'InfantQuotePrice' => '0',
                                                                        'Supplementparentkey' => '88',
                                                                        'UnitQuoteCost' => '497',
                                                                        'Enddate' => '16/02/2008',
                                                                        'UniqueId' => '112',
                                                                        'Generic3' => {},
                                                                        'ExchRate' => '1',
                                                                        'ChildQuoteCost' => '0',
                                                                        'UnitCurrencyCost' => '497',
                                                                        'IsPricePerPerson' => '0',
                                                                        'ShowTotal' => {},
                                                                        'TourID' => '0',
                                                                        'adulttax' => {},
                                                                        'AdultQuotePrice' => '0',
                                                                        'SupplierName' => {},
                                                                        'SessionId' => '93',
                                                                        'Markup' => '0',
                                                                        'AdultCurrencyCost' => '0',
                                                                        'ispackage' => '0',
                                                                        'description' => {},
                                                                        'TotalCost' => '497',
                                                                        'ConvertedFromMisc' => '0',
                                                                        'infanttax' => {},
                                                                        'OriginalMarkupChild' => {},
                                                                        'Generic1' => 'SUPPLEMENT',
                                                                        'TotalPrice' => '665',
                                                                        'arrivalTime' => {},
                                                                        'UnitQuotePrice' => '665',
                                                                        'AdultQuoteCost' => '0',
                                                                        'IsCostPerPerson' => '0',
                                                                        'ChildCurrencyCost' => '0',
                                                                        'NumberofChildren' => '0',
                                                                        'OriginalMarkupUnit' => '33.8',
                                                                        'ChildPrice' => '0',
                                                                        'BasketLineType' => 'Extra',
                                                                        'StartDate' => '09/02/2008',
                                                                        'OriginalMarkupAdult' => {},
                                                                        'NumberOfInfants' => '0',
                                                                        'CostCurrency' => 'usd',
                                                                        'resort' => {},
                                                                        'qty' => '1',
                                                                        'InfantCurrencyCost' => '0',
                                                                        'Generic4' => {},
                                                                        'NumberofAdults' => '2',
                                                                        'Generic2' => '0',
                                                                        'InfantQuoteCost' => '0',
                                                                        'childtax' => {},
                                                                        'ComponentCode' => 'Las Brisas Jeep Rental',
                                                                        'SupplementParentType' => '1'
                                                                      },
                                          'MEAL SUPPLM for Test' => {
                                                                      'InfantQuotePrice' => '0',
                                                                      'Supplementparentkey' => '88',
                                                                      'UnitQuoteCost' => '0',
                                                                      'Enddate' => '16/02/2008',
                                                                      'UniqueId' => '110',
                                                                      'Generic3' => {},
                                                                      'ExchRate' => '1',
                                                                      'ChildQuoteCost' => '700',
                                                                      'UnitCurrencyCost' => '0',
                                                                      'IsPricePerPerson' => '1',
                                                                      'ShowTotal' => {},
                                                                      'TourID' => '0',
                                                                      'adulttax' => {},
                                                                      'AdultQuotePrice' => '875',
                                                                      'SupplierName' => {},
                                                                      'SessionId' => '93',
                                                                      'Markup' => '0',
                                                                      'AdultCurrencyCost' => '700',
                                                                      'ispackage' => '0',
                                                                      'description' => {},
                                                                      'TotalCost' => '1400',
                                                                      'ConvertedFromMisc' => '0',
                                                                      'infanttax' => {},
                                                                      'OriginalMarkupChild' => '25',
                                                                      'Generic1' => 'SUPPLEMENT',
                                                                      'TotalPrice' => '1750',
                                                                      'arrivalTime' => {},
                                                                      'UnitQuotePrice' => '0',
                                                                      'AdultQuoteCost' => '700',
                                                                      'IsCostPerPerson' => '1',
                                                                      'ChildCurrencyCost' => '700',
                                                                      'NumberofChildren' => '0',
                                                                      'OriginalMarkupUnit' => {},
                                                                      'ChildPrice' => '875',
                                                                      'BasketLineType' => 'Extra',
                                                                      'StartDate' => '09/02/2008',
                                                                      'OriginalMarkupAdult' => '25',
                                                                      'NumberOfInfants' => '0',
                                                                      'CostCurrency' => 'usd',
                                                                      'resort' => {},
                                                                      'qty' => '1',
                                                                      'InfantCurrencyCost' => '0',
                                                                      'Generic4' => {},
                                                                      'NumberofAdults' => '2',
                                                                      'Generic2' => '1',
                                                                      'InfantQuoteCost' => '0',
                                                                      'childtax' => {},
                                                                      'ComponentCode' => 'MEAL SUPPLM for Test',
                                                                      'SupplementParentType' => '1'
                                                                    }
                                        }
                      }
        };
 
Coloreado en 0.009 segundos, usando GeSHi 1.0.8.4


La estructura correcta debería ser que se subdividiera con el campo <BasketItem>, como lo podrán ver si ejecutan el siguiente post:

http://217.154.224.111/travelink/Extern ... ssionId=93

Aquí si se recibe la información estructurada, la veo así:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. - <xml> 
  2. - <Basket> 
  3. + <BasketItem> 
  4. <name>Las Brisas Acapulco</name>  
  5. <description>Shared Pool Casita</description>  
  6. <NumberofAdults>2</NumberofAdults>  
  7. <NumberofChildren>0</NumberofChildren>  
  8. <NumberOfInfants>0</NumberOfInfants>  
  9. <qty>1</qty>  
  10. <UnitCurrencyCost>1456</UnitCurrencyCost>  
  11. <UnitQuoteCost>1456</UnitQuoteCost>  
  12. <UnitQuotePrice>3780</UnitQuotePrice>  
  13. <AdultCurrencyCost>0</AdultCurrencyCost>  
  14. <AdultQuoteCost>0</AdultQuoteCost>  
  15. <AdultQuotePrice>0</AdultQuotePrice>  
  16. <ChildCurrencyCost>0</ChildCurrencyCost>  
  17. <ChildQuoteCost>0</ChildQuoteCost>  
  18. <ChildPrice>0</ChildPrice>  
  19. <InfantCurrencyCost>0</InfantCurrencyCost>  
  20. <InfantQuoteCost>0</InfantQuoteCost>  
  21. <InfantQuotePrice>0</InfantQuotePrice>  
  22. <IsPricePerPerson>0</IsPricePerPerson>  
  23. <IsCostPerPerson>0</IsCostPerPerson>  
  24. <CostCurrency>usd</CostCurrency>  
  25. <StartDate>09/02/2008</StartDate>  
  26. <Enddate>16/02/2008</Enddate>  
  27. <Markup>0</Markup>  
  28. <OriginalMarkupUnit>159.61</OriginalMarkupUnit>  
  29. <OriginalMarkupAdult />  
  30. <OriginalMarkupChild />  
  31. <UniqueId>88</UniqueId>  
  32. <SessionId>93</SessionId>  
  33. <BasketLineType>Accommodation</BasketLineType>  
  34. <Supplementparentkey />  
  35. <SupplementParentType />  
  36. <Generic1>BB</Generic1>  
  37. <Generic2>Resort</Generic2>  
  38. <Generic3>Acapulco</Generic3>  
  39. <Generic4 />  
  40. <adulttax />  
  41. <childtax />  
  42. <infanttax />  
  43. <TotalCost>1456</TotalCost>  
  44. <TotalPrice>3780</TotalPrice>  
  45. <SupplierName>Las Brisas Acapulco</SupplierName>  
  46. <TourID />  
  47. <ExchRate>1</ExchRate>  
  48. <ispackage>0</ispackage>  
  49. <ComponentCode>HOT0000490000004</ComponentCode>  
  50. <ShowTotal />  
  51. <resort>Acapulco</resort>  
  52. <arrivalTime />  
  53. <ConvertedFromMisc>0</ConvertedFromMisc>  
  54. </BasketItem> 
  55. + <BasketItem> 
  56. <name>MEAL SUPPLM for Test</name>  
  57. <description />  
  58. <NumberofAdults>2</NumberofAdults>  
  59. <NumberofChildren>0</NumberofChildren>  
  60. <NumberOfInfants>0</NumberOfInfants>  
  61. <qty>1</qty>  
  62. <UnitCurrencyCost>0</UnitCurrencyCost>  
  63. <UnitQuoteCost>0</UnitQuoteCost>  
  64. <UnitQuotePrice>0</UnitQuotePrice>  
  65. <AdultCurrencyCost>700</AdultCurrencyCost>  
  66. <AdultQuoteCost>700</AdultQuoteCost>  
  67. <AdultQuotePrice>875</AdultQuotePrice>  
  68. <ChildCurrencyCost>700</ChildCurrencyCost>  
  69. <ChildQuoteCost>700</ChildQuoteCost>  
  70. <ChildPrice>875</ChildPrice>  
  71. <InfantCurrencyCost>0</InfantCurrencyCost>  
  72. <InfantQuoteCost>0</InfantQuoteCost>  
  73. <InfantQuotePrice>0</InfantQuotePrice>  
  74. <IsPricePerPerson>1</IsPricePerPerson>  
  75. <IsCostPerPerson>1</IsCostPerPerson>  
  76. <CostCurrency>usd</CostCurrency>  
  77. <StartDate>09/02/2008</StartDate>  
  78. <Enddate>16/02/2008</Enddate>  
  79. <Markup>0</Markup>  
  80. <OriginalMarkupUnit />  
  81. <OriginalMarkupAdult>25</OriginalMarkupAdult>  
  82. <OriginalMarkupChild>25</OriginalMarkupChild>  
  83. <UniqueId>110</UniqueId>  
  84. <SessionId>93</SessionId>  
  85. <BasketLineType>Extra</BasketLineType>  
  86. <Supplementparentkey>88</Supplementparentkey>  
  87. <SupplementParentType>1</SupplementParentType>  
  88. <Generic1>SUPPLEMENT</Generic1>  
  89. <Generic2>1</Generic2>  
  90. <Generic3 />  
  91. <Generic4 />  
  92. <adulttax />  
  93. <childtax />  
  94. <infanttax />  
  95. <TotalCost>1400</TotalCost>  
  96. <TotalPrice>1750</TotalPrice>  
  97. <SupplierName />  
  98. <TourID>0</TourID>  
  99. <ExchRate>1</ExchRate>  
  100. <ispackage>0</ispackage>  
  101. <ComponentCode>MEAL SUPPLM for Test</ComponentCode>  
  102. <ShowTotal />  
  103. <resort />  
  104. <arrivalTime />  
  105. <ConvertedFromMisc>0</ConvertedFromMisc>  
  106. </BasketItem> 
  107. - <BasketItem> 
  108. <name>MEAL optional</name>  
  109. <description />  
  110. <NumberofAdults>2</NumberofAdults>  
  111. <NumberofChildren>0</NumberofChildren>  
  112. <NumberOfInfants>0</NumberOfInfants>  
  113. <qty>1</qty>  
  114. <UnitCurrencyCost>0</UnitCurrencyCost>  
  115. <UnitQuoteCost>0</UnitQuoteCost>  
  116. <UnitQuotePrice>0</UnitQuotePrice>  
  117. <AdultCurrencyCost>350</AdultCurrencyCost>  
  118. <AdultQuoteCost>350</AdultQuoteCost>  
  119. <AdultQuotePrice>525</AdultQuotePrice>  
  120. <ChildCurrencyCost>350</ChildCurrencyCost>  
  121. <ChildQuoteCost>350</ChildQuoteCost>  
  122. <ChildPrice>525</ChildPrice>  
  123. <InfantCurrencyCost>0</InfantCurrencyCost>  
  124. <InfantQuoteCost>0</InfantQuoteCost>  
  125. <InfantQuotePrice>0</InfantQuotePrice>  
  126. <IsPricePerPerson>1</IsPricePerPerson>  
  127. <IsCostPerPerson>1</IsCostPerPerson>  
  128. <CostCurrency>usd</CostCurrency>  
  129. <StartDate>09/02/2008</StartDate>  
  130. <Enddate>16/02/2008</Enddate>  
  131. <Markup>0</Markup>  
  132. <OriginalMarkupUnit />  
  133. <OriginalMarkupAdult>50</OriginalMarkupAdult>  
  134. <OriginalMarkupChild>50</OriginalMarkupChild>  
  135. <UniqueId>111</UniqueId>  
  136. <SessionId>93</SessionId>  
  137. <BasketLineType>Extra</BasketLineType>  
  138. <Supplementparentkey>88</Supplementparentkey>  
  139. <SupplementParentType>1</SupplementParentType>  
  140. <Generic1>SUPPLEMENT</Generic1>  
  141. <Generic2>0</Generic2>  
  142. <Generic3 />  
  143. <Generic4 />  
  144. <adulttax />  
  145. <childtax />  
  146. <infanttax />  
  147. <TotalCost>700</TotalCost>  
  148. <TotalPrice>1050</TotalPrice>  
  149. <SupplierName />  
  150. <TourID>0</TourID>  
  151. <ExchRate>1</ExchRate>  
  152. <ispackage>0</ispackage>  
  153. <ComponentCode>MEAL optional</ComponentCode>  
  154. <ShowTotal />  
  155. <resort />  
  156. <arrivalTime />  
  157. <ConvertedFromMisc>0</ConvertedFromMisc>  
  158. </BasketItem> 
  159. + <BasketItem> 
  160. <name>Las Brisas Jeep Rental</name>  
  161. <description />  
  162. <NumberofAdults>2</NumberofAdults>  
  163. <NumberofChildren>0</NumberofChildren>  
  164. <NumberOfInfants>0</NumberOfInfants>  
  165. <qty>1</qty>  
  166. <UnitCurrencyCost>497</UnitCurrencyCost>  
  167. <UnitQuoteCost>497</UnitQuoteCost>  
  168. <UnitQuotePrice>665</UnitQuotePrice>  
  169. <AdultCurrencyCost>0</AdultCurrencyCost>  
  170. <AdultQuoteCost>0</AdultQuoteCost>  
  171. <AdultQuotePrice>0</AdultQuotePrice>  
  172. <ChildCurrencyCost>0</ChildCurrencyCost>  
  173. <ChildQuoteCost>0</ChildQuoteCost>  
  174. <ChildPrice>0</ChildPrice>  
  175. <InfantCurrencyCost>0</InfantCurrencyCost>  
  176. <InfantQuoteCost>0</InfantQuoteCost>  
  177. <InfantQuotePrice>0</InfantQuotePrice>  
  178. <IsPricePerPerson>0</IsPricePerPerson>  
  179. <IsCostPerPerson>0</IsCostPerPerson>  
  180. <CostCurrency>usd</CostCurrency>  
  181. <StartDate>09/02/2008</StartDate>  
  182. <Enddate>16/02/2008</Enddate>  
  183. <Markup>0</Markup>  
  184. <OriginalMarkupUnit>33.8</OriginalMarkupUnit>  
  185. <OriginalMarkupAdult />  
  186. <OriginalMarkupChild />  
  187. <UniqueId>112</UniqueId>  
  188. <SessionId>93</SessionId>  
  189. <BasketLineType>Extra</BasketLineType>  
  190. <Supplementparentkey>88</Supplementparentkey>  
  191. <SupplementParentType>1</SupplementParentType>  
  192. <Generic1>SUPPLEMENT</Generic1>  
  193. <Generic2>0</Generic2>  
  194. <Generic3 />  
  195. <Generic4 />  
  196. <adulttax />  
  197. <childtax />  
  198. <infanttax />  
  199. <TotalCost>497</TotalCost>  
  200. <TotalPrice>665</TotalPrice>  
  201. <SupplierName />  
  202. <TourID>0</TourID>  
  203. <ExchRate>1</ExchRate>  
  204. <ispackage>0</ispackage>  
  205. <ComponentCode>Las Brisas Jeep Rental</ComponentCode>  
  206. <ShowTotal />  
  207. <resort />  
  208. <arrivalTime />  
  209. <ConvertedFromMisc>0</ConvertedFromMisc>  
  210. </BasketItem> 
  211. </Basket> 
  212. </xml> 


Ya probé con ForceArray =>, pero no resultó.

Alguna idea de en dónde está el error, ya llevo varias horas analizando y no lo encuentro.

Como siempre, mil gracias de antemano...

Caribesoft 8)
caribesoft
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2006-05-09 22:01 @959
Ubicación: Cancun

Publicidad

Notapor explorer » 2007-12-20 19:32 @855

Yo no veo problemas... hay 4 elementos dentro de 'BasketItem'..., pero, por defecto, XML::Simple te lo devuelve en forma de hash.

Hay que tener en cuenta una cosa: XML::Simple siempre nos devuelve toda la información. Salvo casos especiales, depende de nosotros que queramos leerlo de esa manera. Si, imperiosamente, necesitamos leerlo de otra manera, entonces tenemos que investigar la forma en que XML::Simple lee el xml, para que se aproxime a lo que queremos.

En tu caso, creo que quieres que los elementos dentro de 'BasketItem' sean elementos de un array.

Tal y como está ahora, se ve que XML::Simple toma el atributo 'name' como clave para generar las entradas del hash, por lo que, de alguna forma, estamos casi obligando a que siga siendo un hash.

En el manual del XML::Simple, en la sección que explica KeyAttr se dice que las palabras 'name', 'id' y 'key' son las predefinidas para tomarlas como claves de un hash. Por eso aparece 'BasketItem' como hash, con el valor que tenía la clave 'name' como nueva clave que contiene a todas las demás.

Bueno, pues entonces hacemos la prueba de que no sea así, que no tome 'name' como clave si no como una entrada más:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use Data::Dumper;
use LWP::Simple;
use XML::Simple;

get_basket();

sub get_basket {
    my $web = get('http://217.154.224.111/travelink/ExternalFunctions/basketcontents.asp?dbname=Travelly-Test-21Nov07&SessionId=93');
    die "<p>Server Error, please try later ...</p>\n" unless defined $web;

    my $xs  = XML::Simple->new;
    my $xml = $xs->XMLin($web, KeyAttr => []);

    print Dumper($xml);
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y obtenemos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$VAR1 = {
          'Basket' => {
                        'BasketItem' => [
                                          {
                                            'InfantQuotePrice' => '0',
                                            'Supplementparentkey' => {},
                                            'Enddate' => '16/02/2008',
                                            'UnitQuoteCost' => '1456',
                                            'Generic3' => 'Acapulco',
                                            'UniqueId' => '88',
                                            'ExchRate' => '1',
                                            'ChildQuoteCost' => '0',
                                            'IsPricePerPerson' => '0',
                                            'UnitCurrencyCost' => '1456',
                                            'ShowTotal' => {},
                                            'TourID' => {},
                                            'adulttax' => {},
                                            'AdultQuotePrice' => '0',
                                            'SupplierName' => 'Las Brisas Acapulco',
                                            'SessionId' => '93',
                                            'Markup' => '0',
                                            'name' => 'Las Brisas Acapulco',
                                            'ispackage' => '0',
                                            'AdultCurrencyCost' => '0',
                                            'TotalCost' => '1456',
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

y observamos que, ahora, 'BasketItem' sí que aparece como array (y 'name' como una entrada más).

Así que con solo un cambio en un atributo de XML::Simple hemos matado dos pájaros de un tiro :-)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Muchas Gracias ....

Notapor caribesoft » 2007-12-20 20:29 @895

Estimado Explorer:

Te agradezco mucho tu apoyo y entiendo que hay que leer más los manuales... cuando me imaginaría que 'name' en este caso el nombre de un campo, lo tomaba como clave para el hash.

Y también me perdí, porque realmente no veía el array, formado con el 'BasketItem'...

Nunca dejo de sorprenderme de tus conocimientos, y nunca dejo de aprender en este lugar.

¡¡¡Muchas gracias y feliz navidad, y prospero 2008!!!

Caribesoft 8)
caribesoft
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2006-05-09 22:01 @959
Ubicación: Cancun

Otra pregunta

Notapor caribesoft » 2008-01-02 14:48 @658

Hola Explorer:

Siguiendo con este tema, fíjate que pasa algo extraño, cuando solo existe un elemento <name> dentro del array Basketitem, me envía un error : "Not an ARRAY reference"; cómo podría validar si solo tiene un elemento, que lo lea como un "Array", y si tiene más que lo lea como un "Hash", ¿hay alguna forma de saberlo?

El error lo envía en esta linea 4:

Código: Seleccionar todo
     1 my $xs  = XML::Simple->new;
     2 my $xml = $xs->XMLin($web, KeyAttr => []);
     3 print Dumper($xml);
     4  foreach(@{$xml->{Basket}->{BasketItem}}) {


Si cuando hay un solo elemento, la cambio de esta forma :

Código: Seleccionar todo
     4 foreach($xml->{Basket}->{BasketItem}) {


Sí funciona bien.

Un cordial saludo y gracias de antemano por tu ayuda,

Caribesoft 8)
caribesoft
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2006-05-09 22:01 @959
Ubicación: Cancun

Notapor explorer » 2008-01-02 17:17 @762

Del XML::Simple:
Código: Seleccionar todo
       ForceArray => 1 # in - important

       This option should be set to '1' to force nested elements to be represented as arrays even when there
       is only one.  Eg, with ForceArray enabled, this XML:

           <opt>
             <name>value</name>
           </opt>

       would parse to this:

           {
             'name' => [
                         'value'
                       ]
           }

       instead of this (the default):

           {
             'name' => 'value'
           }
luego...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $xml = $xs->XMLin($web, KeyAttr => [], ForceArray => [ 'BasketItem' ]);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

¡¡¡ Muy bien !!!

Notapor caribesoft » 2008-01-02 17:54 @787

Gracias Explorer:

Si funciono así, estuve leyendo XML::Simple, pero no entendí que si se pueden combinar varios parámetros a la vez, y efectivamente el ForceArray era lo que me faltaba.

Nuevamente gracias por compartir tu sabiduría,

Saludos,

Caribesoft 8)
caribesoft
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2006-05-09 22:01 @959
Ubicación: Cancun


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados