繁体   English   中英

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

[英]Generate seperate XML file for each mysql table row using PHP

我在 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        |

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

我该如何实现? 有人指出在[array_column ( array $array , mixed $column_key [, mixed $index_key = null ] )]使用数组列特征[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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM