获取文本td Xpath PHP

I am getting tr of tables and then in loop i want get text of all td fields, look here:

<?
    $lines = $xpath->query("//table[@id='cab_table'] //tr");
       var_dump($lines);// Give me object(DOMNodeList)#11 (1) { ["length"]=> int(6) }


            for( $i = 0; $i < count($lines); $i++) {
                if($i != 0){
                    $tds = $xpath->query('//td', $lines[$i]);
                    $result[$i - 1]['number'] = trim($tds->item(0)->nodeValue);
                    $result[$i - 1]['volume'] = trim($tds->item(1)->nodeValue);
                    $result[$i - 1]['sum'] = trim($tds->item(2)->nodeValue);
                }
            }

            var_dump($result); //Give me NULL
            die();

?>

Why i get NULL?

Now i have:

$lines = $xpath->query("//table[@id='cab_table'] //tr");


            foreach($lines as $line) {
             $tds = $xpath->query('//td', $line);
             $count = $tds->length;

                for($i=0; $i<$count; $i++){

                    echo $tds->item($i)->nodeValue.'<br>';
                    //echo $i.'<br>';


                }

            }

But i want make the next for each tr at loop $result[0] = td[0]; $result[1] = td[1]; $result[2] = td[2]; Can you advise me?

duancifu6769
duancifu6769 您可能正在寻找:php.net/iterator_to_array
大约 7 年之前 回复
duanhanglekr37902
duanhanglekr37902 不是真的有必要,但如果你发布HTML或链接它可能会有所帮助。
大约 7 年之前 回复

2个回答

foreach($lines as $line) {

                    for($j=0; $j<=3; $j++) {

                     $tds_{$j} = $xpath->query('//td['.$j.']', $line);
                     $tds_{$j} = $xpath->query('//td['.$j.']', $line);
                     $tds_{$j} = $xpath->query('//td['.$j.']', $line);

                     $count = $tds_{$j}->length;


                        for($i=0; $i<$count; $i++){

                            $this->result['number'][] = $tds_{$j}->item($i)->nodeValue;
                            $this->result['volume'][] = $tds_{$j}->item($i)->nodeValue;
                            $this->result['code'][] = $tds_{$j}->item($i)->nodeValue;
                            $this->result['start_date'][] = $startDate;
                            $this->result['end_date'][] = $endDate;

                        }

                    }

                }
doubo4336
doubo4336 你在哪? 拜托,你能看到我的例子吗,它运作错误,我不需要我数据td [0] td [1] td [2]
大约 7 年之前 回复

->query() returns a DOMNodeList object. It can be count()ed and foreach()ed, but you can't USE it as an array as you are.

$tds = $xpath->query('//td', $lines[$i]);
                             ^^^^^^^^^^---incorrect

Try

$lines = $xpath->query("//table[@id='cab_table'] //tr");
foreach($lines as $line) {
    $tds = $xpath->query('//td', $line);
    ...
}

instead.

dongnue4923
dongnue4923 试过这样:foreach($ lines as $ line){$ tds = $ xpath-> query('// td',$ line); for($ i = 0; $ i <count($ tds); $ i ++){echo $ tds-> item($ i) - > nodeValue。'<br>'; }}
大约 7 年之前 回复
douzhi2760
douzhi2760 是的。 dom可能是一种痛苦。 您可能需要考虑simplexml,这简化了这种访问。 它更像是$ dom-> table-> tr [0] - > td [1]等等。
大约 7 年之前 回复
douhun8647
douhun8647 谢谢,如果我想要得到td [0],td [1]。 TD [2]? 我需要在循环和foreach中使用循环($ tds as $ val){echo $ val-> item(0) - > nodeValue;} ???
大约 7 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐