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 に答える