Php For循环将xml解析为表
下面是我使用simpleXML解析的XML响应的一部分。我需要创建一个如下示例所示的表,但我不确定如何实现这一点Php For循环将xml解析为表,php,xml,for-loop,foreach,Php,Xml,For Loop,Foreach,下面是我使用simpleXML解析的XML响应的一部分。我需要创建一个如下示例所示的表,但我不确定如何实现这一点 $roomCategory =' <ChargeConditions> <ChargeCondition Type="cancellation"> <Condition Charge="true" ChargeAmount="2730.00" Currency="USD" FromDay="0" ToDay="0"/> <Condi
$roomCategory ='
<ChargeConditions>
<ChargeCondition Type="cancellation">
<Condition Charge="true" ChargeAmount="2730.00" Currency="USD" FromDay="0" ToDay="0"/>
<Condition Charge="true" ChargeAmount="390.00" Currency="USD" FromDay="1" ToDay="2"/>
<Condition Charge="false" FromDay="3"/>
</ChargeCondition>
<ChargeCondition Type="amendment">
<Condition Charge="false" FromDay="0"/>
</ChargeCondition>
</ChargeConditions>';
我遇到了一个问题,因为ammentcondition出现在另一个节点中,我正在尝试这样做,但我不确定我是否在正确的轨道上,以及如何回显所有内容以形成上表
更新代码:
$chargeConditions = $roomCategory->ChargeConditions;
echo '<table>';
echo '<tr>';
echo '<th></th>';
foreach ($chargeConditions->ChargeCondition as $condition) {
echo '<th>' . ucfirst($condition['Type']) . '</th>';
}
echo '</tr>';
echo '<tr>';
$val = array();
$c = 0;
foreach ($chargeConditions->ChargeCondition as $condition) {
$val[$c][0] = $condition["Type"];
$charges = $condition->Condition;
var_dump($charges);
foreach($charges as $charge){
if($charge["Charge"] !== "false"){
$val[$c][1] = $charge["FromDay"];
$val[$c][2] = $charge["ToDay"];
$val[$c][3] = $charge["ChargeAmount"];
}
}
$c++;
}
for($x=0; $x <= $c; $x++){
echo '<tr>';
echo '<td>From Day' . $val[$x][1] .'<br>To Day' . $val[$x][2] . '</td>';
echo '<td>' . $val[$x][3] . '</td>';
echo '<td>' . $val[$x+1][3] . '</td>';
echo '</tr>';
}
echo '</table>';
var_dump($charges)提供以下输出:
object(SimpleXMLElement)#455 (1) { ["@attributes"]=> array(5) { ["Charge"]=> string(4) "true" ["ChargeAmount"]=> string(7) "2730.00" ["Currency"]=> string(3) "USD" ["FromDay"]=> string(1) "0" ["ToDay"]=> string(1) "0" } } object(SimpleXMLElement)#504 (1) { ["@attributes"]=> array(2) { ["Charge"]=> string(5) "false" ["FromDay"]=> string(1) "0" } }
我会把所有的东西都解析成一个数组,它的键是FromDay。。。差不多
$cancellation=array();
$amendment=array();
foreach ($chargeConditions->ChargeCondition as $condition) {
$var = $condition->attributes()->Type;
foreach($condition as $child)
{
$$var[$child->attributes()->FromDay]=($child->attributes()->Charge)?$child->attributes()->ChargeAmount:"No Charge";
}
}
一旦阵列就位,只需执行另一个循环
<table><tr><td> </td><td>Cancel</td><td>Ammend</td></tr>
<?php
foreach ($cancellations as $fromDay=>$cancel)
{
?>
<tr>
<td><?php echo $fromDay?></td>
<td><?php echo $cancel?></td>
<td><?php echo isset($ammendment[$fromDay])?$ammendment[$fromDay]:"No Charge"?></td>
</tr>
<?php
}
?>
</table>
CancelAmmend
你确定这样行吗$条件['type']和$condition->condition一起使用???您有一个数组或一个对象。@davidsamiento$condition[“Type”]将输出“Cancelation”,而$condition->condition是ChargeCondition
节点下的3个condition
节点的数组。我使用了您的代码,但该表只回显标题“Cancelation”和“amendment”,我已将代码更新为当前版本,但我还无法理解。请确保使用SimpleXMLElement对象,而不是自定义定义的类
$cancellation=array();
$amendment=array();
foreach ($chargeConditions->ChargeCondition as $condition) {
$var = $condition->attributes()->Type;
foreach($condition as $child)
{
$$var[$child->attributes()->FromDay]=($child->attributes()->Charge)?$child->attributes()->ChargeAmount:"No Charge";
}
}
<table><tr><td> </td><td>Cancel</td><td>Ammend</td></tr>
<?php
foreach ($cancellations as $fromDay=>$cancel)
{
?>
<tr>
<td><?php echo $fromDay?></td>
<td><?php echo $cancel?></td>
<td><?php echo isset($ammendment[$fromDay])?$ammendment[$fromDay]:"No Charge"?></td>
</tr>
<?php
}
?>
</table>