【发布时间】:2020-07-16 07:22:26
【问题描述】:
我正在使用 XML 和 PHP 编译一个列表。我正在寻找在 RailVehicleStateClass 中为每个火车 ID 找到的第一个“目的地标签”并将其回显。我尝试做一个 foreach 循环来收集目标标签,但它只是为每个火车 ID 循环相同的数据,直到 xml 文件结束。下面是 XML 文件的 sn-p,完整版本有 700 多个条目,每列火车可以有 1 到 100 多个与之关联的轨道车辆。
XML
<ScnLoader xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<trainList>
<TrainLoader>
<trainID>99991</trainID>
<TrainWasAI>false</TrainWasAI>
<DispatchTrainDirection>0</DispatchTrainDirection>
<ManuallyAppliedSpeedLimitMPH>2147483647</ManuallyAppliedSpeedLimitMPH>
<PreviousSignalInstruction>Clear</PreviousSignalInstruction>
<unitLoaderList>
<RailVehicleStateClass>
<destinationTag>TRC SVMS</destinationTag>
</RailVehicleStateClass>
<RailVehicleStateClass>
<destinationTag>PRC</destinationTag>
</RailVehicleStateClass>
</unitLoaderList>
</TrainLoader>
</trainList>
</ScnLoader>
PHP
<?php
$trains = simplexml_load_file("Auto%20Save%20World.xml") or die("Error: Cannot create object");
$totalUnitCount=0;
echo "<table>";
echo "<th>#</th>";
echo "<th>Train ID</th>";
echo "<th>Symbol</th>";
echo "<th>Direction</th>";
echo "<th>AI</th>";
foreach ($trains->xpath("//TrainLoader") as $train) {
$totalUnitCount = $totalUnitCount + 1;
foreach (array_slice($trains->xpath("//RailVehicleStateClass"),0,1) as $unit){
echo $unit->destinationTag;
}
echo "</td>";
echo "<td>";
echo $train->DispatchTrainDirection;
echo "</td>";
echo "<td>";
echo $train->TrainWasAI;
echo "</td>";
}
?>
【问题讨论】:
-
这仍然只是为每一行重复相同的第一个标签
-
您可以直接使用
echo $train->unitLoaderList->RailVehicleStateClass->destinationTag;而不是运行另一个 XPath 查询。