0

I'm trying to parse a pre made XML document and format it into a user friendly php/html document using simplexml. I believe I formatted the PHP it correctly but all that results is a white page. I looked at a few other examples but they looked more complex than what I was trying to achieve

<?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>
miken32
  • 42,008
  • 16
  • 111
  • 154
user1537210
  • 15
  • 1
  • 7

1 Answers1

-2

You're trying to access $orders->RailVehicleStateClass but as this is not the child of the root element, it will not return anything. You can use $orders->trainList->TrainLoader->unitLoaderList->RailVehicleStateClass or instead try using an XPath query to get what you're looking for:

<?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;
}
miken32
  • 42,008
  • 16
  • 111
  • 154