Разбор XML в PHP с помощью Simplexml - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь разобрать готовый XML-документ и отформатировать его в удобный php / html-документ, используя simplexml. Я полагаю, что отформатировал PHP правильно, но все, что в результате - белая страница. Я посмотрел на несколько других примеров, но они выглядели более сложными, чем то, что я пытался достичь

<?php
$orders = simplexml_load_file('train.xml');
foreach ($orders->RailVehicleStateClass as $traininfo):
    $unitType=$traininfo->unitType;
    $unitNumber=$traininfo->unitNumber;
    $destinationTag=$traininfo->destinationTag;
    $loadWeightUSTons=$traininfo->loadWeightUSTons;
    echo $unitType;
    echo $unitNumber;
    echo $destinationTag;
    echo $loadWeightUSTons;
endforeach;
?>

XML

<?xml version="1.0"?>
<ScnLoader xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <trainList>
    <TrainLoader>
      <unitLoaderList>
        <RailVehicleStateClass>
          <rvXMLfilename>R8_SD40T-2_UP03.xml</rvXMLfilename>
          <unitType>US_DieselEngine</unitType>
          <loadWeightUSTons>14.2985783</loadWeightUSTons>
          <destinationTag>MDTLA</destinationTag>
          <unitNumber>8626</unitNumber>
        </RailVehicleStateClass>
        <RailVehicleStateClass>
          <rvXMLfilename>R8_SD40T-2_UP01.xml</rvXMLfilename>
          <unitType>US_DieselEngine</unitType>
          <loadWeightUSTons>14.2985792</loadWeightUSTons>
          <destinationTag>None</destinationTag>
          <unitNumber>4401</unitNumber>
        </RailVehicleStateClass>
        <RailVehicleStateClass>
          <rvXMLfilename>R8_SD40T-2_UP01.xml</rvXMLfilename>
          <unitType>US_DieselEngine</unitType>
          <loadWeightUSTons>14.2985783</loadWeightUSTons>
          <destinationTag>None</destinationTag>
          <unitNumber>4454</unitNumber>
        </RailVehicleStateClass>
      </unitLoaderList>
    </TrainLoader>
  </trainList>
</ScnLoader>

1 Ответ

0 голосов
/ 07 ноября 2018

Вы пытаетесь получить доступ к $orders->RailVehicleStateClass, но так как это не дочерний элемент корневого элемента, он ничего не вернет. Вы можете использовать $orders->trainList->TrainLoader->unitLoaderList->RailVehicleStateClass или вместо этого попытаться использовать запрос XPath, чтобы получить то, что вы ищете:

<?php
$orders = simplexml_load_file('train.xml');
foreach ($orders->xpath("//RailVehicleStateClass") as $traininfo) {
    $unitType=$traininfo->unitType;
    $unitNumber=$traininfo->unitNumber;
    $destinationTag=$traininfo->destinationTag;
    $loadWeightUSTons=$traininfo->loadWeightUSTons;
    echo $unitType;
    echo $unitNumber;
    echo $destinationTag;
    echo $loadWeightUSTons;
}
...