我需要帮助以 table 形式显示带有 PHP 的 XML 文件
I need help displaying an XML file with PHP in table form
我需要获取 XML 文件的内容并将其显示在 table 中。因为它有不同的级别,我需要它是 table 中的 table 中的 table (Inception 风格)。现在到了棘手的部分,我需要的信息是属性及其名称,但它们并不总是存在,而且我不知道属性的名称。我一直在努力尝试使用 foreach()
的递归函数,但没有成功。我一直在使用 simplexml_load_file()
然后我可以打印内容但我不能以 table 形式打印。我最接近的解决方案是这样的(只是一个例子):
for ($i = 0; $i <= 5 ; $i++){
foreach($xml2->level_0[$i]->level_1[$j]->attributes() as $a => $b){
echo $a . ' => ' . $b . '<br/>';
}
非常感谢您的帮助,因为我似乎找不到足够的信息。
完美的解决方案是一个脚本,该脚本贯穿整个文件并且可以显示为 table 信息,而不用关心标签名称或属性名称。下面是 XML 文件的示例。
<level_0 xmlns="http://www.google.com" EchoToken="185345732" MessageContentCode="1" Target="Production" TimeStamp="2015-06-01T06:40:21" Version="2.001">
<level_1 ChainCode="HX" HotelCode="HXBASZZ">
<level_2 BookingLimit="1" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="DD1" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="2" ID_Context="16" />
</level_2>
<level_2 BookingLimit="0" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="ED0" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="1" ID_Context="16" />
</level_2>
<level_2 BookingLimit="9" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="ED1" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="3" ID_Context="16" />
</level_2>
<level_2 BookingLimit="13" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="ED2" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="5" ID_Context="16" />
</level_2>
<level_2 BookingLimit="3" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="ED3" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="7" ID_Context="16" />
</level_2>
<level_2 BookingLimit="2" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="ET0" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="9" ID_Context="16" />
</level_2>
<level_2 BookingLimit="5" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="PD1" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="4" ID_Context="16" />
</level_2>
<level_2 BookingLimit="8" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="PD2" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="6" ID_Context="16" />
</level_2>
<level_2 BookingLimit="4" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="PD3" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="8" ID_Context="16" />
</level_2>
</level_1>
</level_0>
试试这个:
$xml = simplexml_load_file($file);
echo '<table>';
foreach($xml->level_1->level_2 as $item){
echo '<tr>';
$End = $item->level_3_1->attributes()->End->__toString();
echo "<td>$End</td>";
$InvTypeCode = $item->level_3_1->attributes()->InvTypeCode->__toString();
echo "<td>$InvTypeCode</td>";
echo '</tr>';
}
echo '</table>';
好的 - 然后试试这个..
$xml = simplexml_load_file($file);
echo '<table>';
foreach($xml->level_1->level_2 as $item){
$level3 = $item->level_3_1->attributes();
echo '<tr>';
foreach($level3 as $name => $value){
echo "<th>$name</th>";
echo "<td>$value</td>";
}
echo '</tr>';
}
echo '</table>';
我需要获取 XML 文件的内容并将其显示在 table 中。因为它有不同的级别,我需要它是 table 中的 table 中的 table (Inception 风格)。现在到了棘手的部分,我需要的信息是属性及其名称,但它们并不总是存在,而且我不知道属性的名称。我一直在努力尝试使用 foreach()
的递归函数,但没有成功。我一直在使用 simplexml_load_file()
然后我可以打印内容但我不能以 table 形式打印。我最接近的解决方案是这样的(只是一个例子):
for ($i = 0; $i <= 5 ; $i++){
foreach($xml2->level_0[$i]->level_1[$j]->attributes() as $a => $b){
echo $a . ' => ' . $b . '<br/>';
}
非常感谢您的帮助,因为我似乎找不到足够的信息。
完美的解决方案是一个脚本,该脚本贯穿整个文件并且可以显示为 table 信息,而不用关心标签名称或属性名称。下面是 XML 文件的示例。
<level_0 xmlns="http://www.google.com" EchoToken="185345732" MessageContentCode="1" Target="Production" TimeStamp="2015-06-01T06:40:21" Version="2.001">
<level_1 ChainCode="HX" HotelCode="HXBASZZ">
<level_2 BookingLimit="1" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="DD1" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="2" ID_Context="16" />
</level_2>
<level_2 BookingLimit="0" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="ED0" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="1" ID_Context="16" />
</level_2>
<level_2 BookingLimit="9" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="ED1" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="3" ID_Context="16" />
</level_2>
<level_2 BookingLimit="13" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="ED2" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="5" ID_Context="16" />
</level_2>
<level_2 BookingLimit="3" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="ED3" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="7" ID_Context="16" />
</level_2>
<level_2 BookingLimit="2" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="ET0" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="9" ID_Context="16" />
</level_2>
<level_2 BookingLimit="5" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="PD1" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="4" ID_Context="16" />
</level_2>
<level_2 BookingLimit="8" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="PD2" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="6" ID_Context="16" />
</level_2>
<level_2 BookingLimit="4" BookingLimitMessageType="SetLimit">
<level_3_1 End="2015-06-06" Fri="true" InvTypeCode="PD3" Mon="true" Sat="true" Start="2015-06-06" Sun="true" Thur="true" Tue="true" Weds="true" />
<level_3_2 ID="8" ID_Context="16" />
</level_2>
</level_1>
</level_0>
试试这个:
$xml = simplexml_load_file($file);
echo '<table>';
foreach($xml->level_1->level_2 as $item){
echo '<tr>';
$End = $item->level_3_1->attributes()->End->__toString();
echo "<td>$End</td>";
$InvTypeCode = $item->level_3_1->attributes()->InvTypeCode->__toString();
echo "<td>$InvTypeCode</td>";
echo '</tr>';
}
echo '</table>';
好的 - 然后试试这个..
$xml = simplexml_load_file($file);
echo '<table>';
foreach($xml->level_1->level_2 as $item){
$level3 = $item->level_3_1->attributes();
echo '<tr>';
foreach($level3 as $name => $value){
echo "<th>$name</th>";
echo "<td>$value</td>";
}
echo '</tr>';
}
echo '</table>';