Создание переменных на основе выпадающего списка из извлеченных данных XML - PullRequest
0 голосов
/ 08 октября 2018

Я извлекаю данные из XML-документа, используя циклы DOMDocument и foreach.Для одной из точек данных, которые мне нужны, style, я создал ассоциативный массив с именем стиля и идентификатором стиля .Затем я экспортировал имя стиля в выпадающий список <select>.Я пытаюсь выяснить, как создать переменную с идентификатором стиля , на основе которой имя стиля было выбрано в раскрывающемся списке.Вот что у меня есть:

Два стиля - это 5dr Avant Wgn Man и 5dr Avant Wgn Auto.Они экспортируются в раскрывающийся список.Их соответствующие идентификаторы стиля: 292015 и 292016.Таким образом, ассоциативный массив будет выглядеть примерно так: 5dr Avant Wgn Man => 292015 и 5dr Avant Wgn Auto => 292016.

То, чего я хочу достичь, - это когда 5dr Avant Wgn Man выбрано из выпадающего списка, 292015 установлено равным $variable.Таким образом, echo $variable; будет отображать 292015.И наоборот для другого стиля.

Вот мой PHP:

<html>

<body>

<?php

 $xml = file_get_contents('data.xml');
 $dom = new DOMDocument();
 $dom->loadXML($xml);

?>

<select>
  <option selected="selected">Choose style</option>
    <?php
      foreach ( $dom->getElementsByTagName('style') as $styletwo )          {
        $styleid = $styletwo->getAttribute("name");
        $styleData [$styleid]= $styletwo->getAttribute("id");;
       }
      foreach ($styleData as $k=>$v){
      ?>
       <option><?php echo $k;?> </option>
      <?php
       }
      ?>
 </select>

</body>

</html>

Вот XML-документ, из которого я извлекаю:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
  <VehicleDescription country="US" language="en" modelYear="2008" bestMakeName="Audi" bestModelName="S4" bestStyleName="5dr Avant Wgn" xmlns="urn:description7b.services.chrome.com">
     <responseStatus responseCode="Successful" description="Successful"/>

     <style id="292015" modelYear="2008" name="5dr Avant Wgn Man" nameWoTrim="5dr Avant Wgn Man" mfrModelCode="8ED549" fleetOnly="false" modelFleet="false" passDoors="4" altBodyType="Station Wagon" drivetrain="All Wheel Drive">
        <division id="4">Audi</division>
        <subdivision id="5020">Audi</subdivision>
        <model id="17308">S4</model>
        <basePrice unknown="false" invoice="46137.0" msrp="49610.0" destination="775.0"/>
        <bodyType primary="true" id="7">Station Wagon</bodyType>
        <marketClass id="53">Small Wagon</marketClass>
        <acode>USB80AUC085A0</acode>
     </style>
     <style id="292016" modelYear="2008" name="5dr Avant Wgn Auto" nameWoTrim="5dr Avant Wgn Auto" mfrModelCode="8ED54L" fleetOnly="false" modelFleet="false" passDoors="4" altBodyType="Station Wagon" drivetrain="All Wheel Drive">
        <division id="4">Audi</division>
        <subdivision id="5020">Audi</subdivision>
        <model id="17308">S4</model>
        <basePrice unknown="false" invoice="47162.0" msrp="50710.0" destination="775.0"/>
        <bodyType primary="true" id="7">Station Wagon</bodyType>
        <marketClass id="53">Small Wagon</marketClass>
        <acode>USB80AUC085A1</acode>
     </style>
   </VehicleDescription>
  </S:Body>
</S:Envelope>

Я думаю, что-то вроде if statement с $k и $v может сработать, но я не смог понять это.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 08 октября 2018

Изменение вашего кода следующим образом

    <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>
    <select name='my_select'>
       <option value='<?php echo $v;?>'>
       <?php echo $k;?> 
       </option>
    </select>
    </form>

Дает следующий HTML

  <select name='my_select'>
  <option selected="selected">Choose style</option>
           <option value='292015'>
       5dr Avant Wgn Man 
       </option>
             <option value='292016'>
       5dr Avant Wgn Auto 
       </option>
   </select>

Это то, что вы хотите?

...