2015-06-14 2 views
0

У меня проблема в php. Я могу только восстановить значение кулачного тега.PHP XML - Восстановление дочерних узлов

Это XML файл

<?xml version="1.0" encoding="UTF-8"?> 
<Response> 
<reservation id="000020" internalId="7366776" > 
    <ccData ccExpireDate="null/null" /> 
    <reservationDetail id="2_0" currency="" /> 
    <dayPrice detailId="" roomId="2" day="2015-08-01" /> 
    <dayPrice detailId="" roomId="2" day="2015-08-02" /> 
</reservation> 
<reservation id="000010" internalId="7366642" > 
    <ccData ccCode="Michan" ccNumber="3000000000000" ccExpireDate="12/2016" /> 
    <reservationDetail id="2_0" currency="USD" checkin="2015-07-01" /> 
    <supplement detailId="" roomId="2" description="breakfast" /> 
    <supplement detailId="" roomId="2" description="wifi" /> 
    <supplement detailId="" roomId="2" description="transfer" /> 
    <dayPrice detailId="" roomId="2" day="2015-06-01" /> 
    <dayPrice detailId="" roomId="2" day="2015-06-02" /> 
    <guest detailId="" roomId="2" firstName="Rolando" /> 
    <guest detailId="" roomId="2" firstName="Jessica " /> 
</reservation> 
<reservation id="0005" internalId="7243828" > 
    <ccData ccCode="453" ccNumber="34983483649365936539" ccExpireDate="05/2016" /> 
    <reservationDetail id="2_0" currency="USD" checkin="2015-05-28" /> 
    <dayPrice detailId="" roomId="2" day="2015-05-29" /> 
    <dayPrice detailId="" roomId="2" day="2015-05-29" /> 
</reservation> 
</Response> 

И это код PHP для retrive данные

//SUPPLEMENT 
$Cont=0; 
echo "SUP >>>>> ".count($xml->reservation[$x]->supplement)."<br>"; 
do {  
    foreach($xml->reservation[$x]->supplement->attributes() as $a => $b) { 
     $Texto='[SUPPLEMENT '.sprintf('%02d', $Cont).'] '.$a.'="'.utf8_decode($b).'"'; 
     echo $Texto."<br>";   
    } 
    $Cont++; 
} while ($Cont > 99); 

Это этот код на выходе это

[SUPPLEMENT 00] detailId="" 
[SUPPLEMENT 00] roomId="2" 
[SUPPLEMENT 00] description="breakfast" 

Вместо от

[SUPPLEMENT 00] detailId="" 
[SUPPLEMENT 00] roomId="2" 
[SUPPLEMENT 01] description="breakfast" 
[SUPPLEMENT 01] detailId="" 
[SUPPLEMENT 01] roomId="2" 
[SUPPLEMENT 01] description="wifi" 
[SUPPLEMENT 02] detailId="" 
[SUPPLEMENT 02] roomId="2" 
[SUPPLEMENT 02] description="transfer" 

та же проблема, что и теги dayPrice и guest.

Может кто-нибудь мне помочь?

Благодарим вас заранее!

ответ

1

Ваш цикл foreach проходит только через атрибуты одного supplement. Вам нужно еще один, чтобы петля, хотя каждый supplement и следующей к проходному каждому атрибуту:

do { 
    foreach($xml->reservation[$x]->supplement as $supplement) { 
     foreach($supplement->attributes() as $a => $b) { 
     $Texto='[SUPPLEMENT '.sprintf('%02d', $Cont).'] '.$a.'="'.utf8_decode($b).'"'; 
     echo $Texto."<br>";   
     } 
    } 
    $Cont++; 
} while ($Cont > 99); 

Примечания:$x находится в вашем случае 1.

+0

Большое спасибо Спенсер !!! Это работает !!! ГЕНИЙ !!!! –

Смежные вопросы