0

DOM / Xpathを使用してHTMLを解析しています。最終的な目標は、クエリで取得したデータを使用して.CSVファイルを生成することです。

以下の現在のコードは機能しますが、最後の製品名のみを返します。私はここで正しい方向に進んでいることを知っていますが、私は限界に達しており、これを理解することはできません。どんな助けでも大いに、大いに感謝されるでしょう。ありがとう。

$names = array();
$result = $xpath->query("//div[@class='product-name']");
foreach ($result as $nam) {
$names[] = $nam->nodeValue;
$i = 0;
$values=$names[$i] = $nam->nodeValue;
}

$list = array (
    array('Product Name','Stock Level','Price'),
    array($values, '456', '789'),
);

$fp = fopen('product-sheet.csv', 'w');

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);
4

2 に答える 2

1

問題は、ループ内で $i を設定していることです。

foreach ($result as $nam) {
$names[] = $nam->nodeValue;
$i = 0;
$values=$names[$i] = $nam->nodeValue;
}

各反復で、$i は 0 にリセットされます。代わりに次のようにしてみてください。

for($i=0; $i< count($result); $i++) {
    $names[] = $result->nodeValue;
    $values=$names[$i] = $result->nodeValue;
}
于 2012-05-02T19:05:14.563 に答える
1

あなたが何を達成しようとしているのかは完全にはわかりませんが、これがあなたの目標に近づくことを願っています.

<?php

        //mocked up input, substitute for your HTML source
        $input = "<html>
                    <div class='product-name'>test1</div>
                    <div class='product-name'>test2</div>
                    <div class='product-name'>test3</div>
                    <div class='product-name'>test4</div>
                    <div class='product-name'>test5</div>
                </html>";

        $doc = new DOMDocument();
        @$doc->loadHTML($input);
        libxml_use_internal_errors(FALSE);
        $xpath = new DomXPath($doc);

        $list = array (
            array('Product Name','Stock Level','Price')
        );

        $result = $xpath->query("//div[@class='product-name']");

        foreach ($result as $nam) {
            $value = $nam->nodeValue;
            $list[] = array($value, '456', '789');  //Appends an array to the lists array
        }

        $fp = fopen('product-sheet.csv', 'w');

        foreach ($list as $fields) {
            fputcsv($fp, $fields);
        }

        fclose($fp);

    ?>
于 2012-05-02T20:30:37.547 に答える