Способ ограничения данных на основе уникального идентификатора - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть xml файл со списком поездов, и каждый состав поезда привязан к указанному c trainID. Я написал сценарий php для компиляции этих данных в удобочитаемый для пользователя формат, но не могу найти способ настроить его на чтение и вывод только тех данных, которые связаны с trainID. Я ищу ссылку на страницу отчета о поездке с URL, используя идентификатор поезда. Я пытался сделать функцию, но я не думаю, что это то, что мне нужно, потому что она не работала. Ниже приведена часть моего 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>
        <rvXMLfilename>R8_CoveredHopper_PS4750_DGHX01.xml</rvXMLfilename>
        <unitType>US_Freightcar</unitType>
        <currentRoutePrefix>
          <int>320</int>
          <int>320</int>
        </currentRoutePrefix>
        <currentTrackSectionIndex>
          <int>1365</int>
          <int>1365</int>
        </currentTrackSectionIndex>
        <startNodeIndex>
          <int>0</int>
          <int>0</int>
        </startNodeIndex>
        <distanceTravelledInMeters>
          <float>76.0736</float>
          <float>90.00746</float>
        </distanceTravelledInMeters>
        <reverseDirection>
          <boolean>true</boolean>
          <boolean>true</boolean>
        </reverseDirection>
        <loadWeightUSTons>111.1</loadWeightUSTons>
        <destinationTag>BAR HOU</destinationTag>
        <unitNumber>571555</unitNumber>
      </RailVehicleStateClass>
    </unitLoaderList>
  </TrainLoader>
</trainList>
</ScnLoader>

php

<code><?php
$railunit = simplexml_load_file('railUnitList.xml'); //database of railunits 
$orders = simplexml_load_file('testdata.xml'); //Where the data comes from to form the list
?><pre><?php print_r($orders); ?>
TrainLoader-> trainID как $ trainID) {$ trainid = "99991"; } foreach ($ orders-> xpath ("RailVehicleStateClass") как $ traininfo) {$ rvXMLfilename = (строка) $ traininfo-> rvXMLfilename; $ UnitType = (строка) $ traininfo-> unitType; $ UnitNumber = (целое) $ traininfo-> unitNumber; $ DestinationTag = (строка) $ traininfo-> destinationTag; $ LoadWeightUSTons = (целое) $ traininfo-> loadWeightUSTons; $ totalUnitCount = $ totalUnitCount + 1; echo ""; эхо " "; echo $ totalUnitCount; echo""; echo" "; foreach ($ railunit-> railUnit as $ ru) {if ((строка) $ ru-> rvXMLfilename == $ rvXMLfilename) {$ message = (строка) $ ru-> reportsMark;}} echo $ message; echo ""; echo ""; echo $ unitNumber; echo ""; echo ""; $ message = "Не найдено!"; Foreach ($ railunit-> railUnit as $ ru) {if ((строка) $ ru-> rvXMLfilename == $ rvXMLfilename) {$ message = (строка) $ ru-> unitType;}}} ?>

1 Ответ

0 голосов
/ 06 апреля 2020

Вы можете добавить условие в выражение XPath, чтобы получить только нужный вам узел:

$railunit = $railunit->xpath("//TrainLoader[trainID = $trainid]")[0]; // retrieve all TrainLoader node that has a child 'trainID' with value '$trainid', then keep only the first one

// whole node
echo $railunit->asXML() ;

// access specific information
echo (string) $railunit->xpath('./ManuallyAppliedSpeedLimitMPH')[0]; // 2147483647
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...