0

返された SQL クエリ結果から XML ファイルを生成しようとしています。SQL クエリはItemId、テーブルからItemName、を返します。次のように XML 内の s をリストしたい:ItemDescriptionItemsItemName

XML

...
<item>
    <name>ItemName1</name>
</item>
<item>
    <name>ItemName2</name>
</item>
...

PHP

...
    while($items = @mysql_fetch_assoc($query)){
    foreach($items as $row){
    }
        $node = $doc->createElement('item');
        $node = $root->appendChild($node);
        $child = $doc->createElement('name');
        $child = $node->appendChild($child);
        $value = $doc->createTextNode($row['ItemName']); // !
        $value = $child->appendChild($value);
    }}
...

私の XML 構造は適切に生成されますが、問題は、次のようにすべての要素内ItemDescriptionではなく、各アイテムの最初の文字を取得することです。ItemNamename

...
<name>D</name>
...
<name>H</name>
...

最初の 2 つの項目の文字列の説明は、文字 D と H で始まります。

この動作の原因は何ですか?

4

1 に答える 1

1

私が正しく理解していれば、問題は配列foreach()内の各キーと値のペアをループしていることです。$row通常、mysql の結果セットの各行は多次元ではないため、これはあなたが望む動作ではないと思います。インデックス 'ItemName' が見つからないため、デフォルトで [0] (値の最初の文字) になります。

while() ループだけを試してください。

...
    $resultset = mysql_query( $query );
    while($row = @mysql_fetch_assoc($resultset)){
        $node = $doc->createElement('item');
        $node = $root->appendChild($node);
        $child = $doc->createElement('name');
        $child = $node->appendChild($child);
        $value = $doc->createTextNode($row['ItemName']); // !
        $value = $child->appendChild($value);
    }
...
于 2012-05-07T20:09:20.280 に答える