2015-06-14 64 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的代碼以檢索數據

//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

非常感謝你斯賓塞!這樣可行 !!!天才 !!!! –