php - 使用 PHP 为每个 mysql 表行生成单独的 XML 文件

标签 php mysql mariadb

我在 php 脚本中有这个函数来从 mysql 表生成 xml 文件。

    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);
}

它目前所做的是根据上面的字段映射为mysql表中的整个数据生成xml文件。例如;

<?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        |

我想根据上面的 mysql 数据使用 php 代码中的现有元素映射为每一行生成特定 XML 文件。例如,上表包含 5 行,因此它应该生成 5 个 XML 文件。

我该如何实现?有人指出在脚本中使用数组列功能 [array_column ( array $array , mixed $column_key [, mixed $index_key = null ] )]。还有另一种方法吗?

最佳答案

只需将文档的创建放在循环中就可以了。通过将循环编号 $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);
    }
}

关于php - 使用 PHP 为每个 mysql 表行生成单独的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54141341/

相关文章:

php - 将选定的选项保留在多个选择的PHP中

php - POINT 类型 MySQL 数据类型的 Codeigniter update_batch?

mysql - MYSQL中如何使用变量作为表标识符

MySql:多个左连接使查询非常慢

mysql - 自定义 docker 官方 mariadb 镜像

php - Magento:产品缺少旧价格,使线路不直

php - 在访问时使用 PHP 从 MySQL 数据库中的 txt 文件导入数据

mysql - 海量sql删除查询

php - 如何在 WAMP 中用 MariaDb 替换 MySql?

java - 从 MySQL 迁移到 MariaDB