0

我正在尝试检索多个 .xml 文件(001.xml、002.xml、002.xml 等),从数据库表中添加新的子信息,然后将修改后的信息保存为本地新文件。

即使我在数据库中有很多行,使用 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>
4

3 回答 3

0

改变

while($row = mysql_fetch_array($query, MYSQL_NUM)) 

while ($row=mysql_fetch_array($query))
于 2012-09-23T21:58:12.177 回答
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);      
}
于 2012-09-23T21:58:44.550 回答
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
    ...
}
于 2016-09-09T13:44:06.363 回答