我在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 ] )]
。还有另一种方法吗?
答案 0 :(得分:1)
将文档的创建放入循环中应该会起作用。通过将循环号$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);
}
}