Создать отдельный XML-файл для каждой строки таблицы MySQL, используя PHP - PullRequest
0 голосов
/ 11 января 2019

У меня есть эта функция в php-скрипте для генерации xml-файла из таблицы mysql.

    function createXMLfile($stackarray){

    $filePath = '/root/stack.xml';

    $dom = new DOMDocument('1.0', 'utf-8');

    $root = $dom->createElement('REQUEST');

    for($i=0; $i<count($stackarray); $i++){

        $stackName    =  $stackarray[$i]['stack_name']; 

        $stackSERIAL      =  $stackarray[$i]['stack_serialnumber']; 

        $content = $dom->createElement('CONTENT');

        $device = $dom->createElement('DEVICE');

        $info = $dom->createElement('INFO');

        $name   = $dom->createElement('NAME', $stackName); 

        $info->appendChild($name);  

        $serial     = $dom->createElement('SERIAL', $stackSERIAL); 

        $info->appendChild($serial);

        $type     = $dom->createElement('TYPE', "NETWORKING"); 

        $info->appendChild($type);

        $device->appendChild($info);

        $root->appendChild($content);

        $module     = $dom->createElement('MODULEVERSION', "3.1");

        $content->appendChild($module);

        $process     = $dom->createElement('PROCESSNUMBER', "1");

        $content->appendChild($process);

        $content->appendChild($device);        

        $deviceid = $dom->createElement('DEVICEID', "foo");

        $root->appendChild($deviceid);

        $query     = $dom->createElement('QUERY', "SNMPQUERY");

        $root->appendChild($query);

    }

    $dom->appendChild($root); 

    $dom->save($filePath);
}

В настоящее время он генерирует xml-файл для целых данных в таблице mysql на основе приведенного выше сопоставления полей. Например,

<?xml version="1.0" encoding="utf-8"?>
<REQUEST>
  <CONTENT>
    <MODULEVERSION>3.1</MODULEVERSION>
    <PROCESSNUMBER>1</PROCESSNUMBER>
    <DEVICE>
      <INFO>
        <NAME>Nexus5020 Chassis</NAME>
        <SERIAL>SS613390FZT</SERIAL>
        <TYPE>NETWORKING</TYPE>
      </INFO>
    </DEVICE>
  </CONTENT>
  <DEVICEID>foo</DEVICEID>
  <QUERY>SNMPQUERY</QUERY>
  </REQUEST>

Структура таблицы Mysql выглядит следующим образом

+----+------------------------+--------------------+
| id | stack_name             | stack_serialnumber |
+----+------------------------+--------------------+
|  1 | Nexus5020 Chassis      | SS613390FZT        |
|  2 | 40x10GE/Supervisor     | JA91344BHNK        |
|  3 | 6x10GE Ethernet Module | JA71228018M        |
|  4 | 8x1/2/4G FC Module     | JAB1531020C        |
|  5 | Nexus5020 Chassis      | SSI13390FZT        |

Я хочу сгенерировать специфический XML-файл для каждой строки на основе данных mysql, приведенных выше, используя существующее сопоставление элементов в коде php. Например, приведенная выше таблица содержит 5 строк, поэтому в ней должны быть сгенерированы 5 XML-файлы.

Как мне это сделать? Кто-то указал использовать в скрипте функцию столбца массива [array_column ( array $array , mixed $column_key [, mixed $index_key = null ] )]. Есть ли другой способ сделать это?

1 Ответ

0 голосов
/ 11 января 2019

Должно работать создание документа в цикле. Добавляя номер цикла $i в путь к файлу, вы предотвращаете перезапись файла на каждой итерации.

function createXMLfile($stackarray){
    for($i=0; $i<count($stackarray); $i++){
        $filePath = "/root/stack" . $i . ".xml";
        $dom = new DOMDocument('1.0', 'utf-8');
        $root = $dom->createElement('REQUEST');
        $stackName    =  $stackarray[$i]['stack_name']; 
        $stackSERIAL      =  $stackarray[$i]['stack_serialnumber']; 
        $content = $dom->createElement('CONTENT');
        $device = $dom->createElement('DEVICE');
        $info = $dom->createElement('INFO');
        $name   = $dom->createElement('NAME', $stackName); 
        $info->appendChild($name);  
        $serial     = $dom->createElement('SERIAL', $stackSERIAL); 
        $info->appendChild($serial);
        $type     = $dom->createElement('TYPE', "NETWORKING"); 
        $info->appendChild($type);
        $device->appendChild($info);
        $root->appendChild($content);
        $module     = $dom->createElement('MODULEVERSION', "3.1");
        $content->appendChild($module);
        $process     = $dom->createElement('PROCESSNUMBER', "1");
        $content->appendChild($process);
        $content->appendChild($device);        
        $deviceid = $dom->createElement('DEVICEID', "foo");
        $root->appendChild($deviceid);
        $query     = $dom->createElement('QUERY', "SNMPQUERY");
        $root->appendChild($query);
        $dom->appendChild($root); 
        $dom->save($filePath);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...