我正在尝试检索多个.xml文件(001.xml,002.xml,002.xml等),从数据库表中添加新的子信息,然后将修改后的信息保存为本地新文件。 / p>
即使数据库中有很多行,使用SimpleXMLElement函数也可以防止脚本执行多次。
以下是代码的简化版本:
$query=mysql_query('SELECT id FROM `table`');
while($row = mysql_fetch_array($query))
{
$contents = file_get_contents('path_to_url'.$row[0]);
$xml = new SimpleXMLElement($contents);
// Append information to xml data
for($i=0; $i < count($xml->parent->children->child); $i++)
{
$query=mysql_query('
SELECT `age`
FROM `table2`
WHERE `name` = '.$xml->parent->children->child[$i]->name
);
$childage = mysql_fetch_array($query);
$xml->parent->children->child[$i]->addChild('age',$childage[0]);
}
$file = 'id'.$row[0].'.xml';
file_put_contents($file, $xml->asXML());
}
这是原始样本.xml数据:
001.xml
<parent>
<children>
<child>
<name>herp</name>
</child>
<child>
<name>derp</name>
</child>
</children>
<parent>
002.xml
<parent>
<children>
<child>
<name>manny</name>
</child>
<child>
<name>joe</name>
</child>
<child>
<name>jack</name>
</child>
</children
</parent>
这将是输出(请注意,因为循环停止而未写入002.xml)
001.xml
<parent>
<children>
<child>
<name>herp</name>
<age>10</age>
</child>
<child>
<name>derp</name>
<age>12</age>
</child>
</children>
</parent>
答案 0 :(得分:0)
将while($ row = mysql_fetch_array($ query,MYSQL_NUM))更改为 while($ row = mysql_fetch_array($ query))
答案 1 :(得分:0)
行for($i=0; $i < count($xml->parent1->child1); $i++)
需要更改为
for($i=1; $i <= mysql_num_rows($query); $i++)
$query=mysql_query('SELECT id FROM `table`', MYSQL_NUM);
while($row = mysql_fetch_array($query))
{
$xml = new SimpleXMLElement('path_to_url'.$row[0].'.xml'))
// Append information to xml data
for($i=1; $i <= mysql_num_rows($query); $i++)
{
$query=mysql_query('
SELECT `id`
FROM `table2`
WHERE `column` = '.$xml->parent->child1[$i]
);
$row = mysql_fetch_assoc($query, MYSQL_NUM);
$xml->parent->child1[$i]->addChild('child2',$row[0]);
}
$file = 'id'.$row[0].'.xml';
file_put_contents($file, $xml);
}
答案 2 :(得分:0)
首先尝试将代码放在函数中,然后在循环内(在该范围之外)调用函数。这是我在循环中不止一次调用SimpleXMLElement的唯一方法。
示例:
while($row = mysql_fetch_array($query))
{
myFunction($row);
}
function myFunction($row){
$xml = new SimpleXMLElement('path_to_url'.$row[0].'.xml'))
// Append information to xml data
...
}