2015-06-14 68 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

非常感谢你斯宾塞!这样可行 !!!天才 !!!! –