【问题标题】:Get text td Xpath PHP获取文本 td Xpath PHP
【发布时间】:2013-07-19 00:40:18
【问题描述】:

我正在获取表格的 tr,然后在循环中我想获取所有 td 字段的文本,请看这里:

<?
    $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();

?>

为什么我得到 NULL?

现在我有:

$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>';


                }

            }

但我想在循环 $result[0] = td[0]; $result[1] = td[1]; $result[2] = td[2]; 处为每个 tr 制作下一个你能告诉我吗?

【问题讨论】:

  • 不是很必要,但如果您发布 HTML 或链接到它会有所帮助。
  • 您可能正在寻找:php.net/iterator_to_array

标签: php xpath domready


【解决方案1】:

-&gt;query() 返回一个 DOMNodeList 对象。它可以被count()ed和foreach()ed,但你不能像你一样把它当作一个数组来使用。

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

试试

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

改为。

【讨论】:

  • 谢谢,如果我想得到 td[0] ,td[1]。 td[2]?我需要在循环和 foreach($tds as $val) { echo $val->item(0)->nodeValue;} ??? 处使用循环
  • 是的。 dom 可能会为此感到痛苦。您可能需要考虑 simplexml,它简化了这种访问。它更像是$dom-&gt;table-&gt;tr[0]-&gt;td[1] 之类的。
  • 试过这样:foreach($lines as $line) { $tds = $xpath->query('//td', $line); for($i=0; $iitem($i)->nodeValue.'
    '; } }
【解决方案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;

                        }

                    }

                }

【讨论】:

  • 你在哪里?拜托,你能看到我的例子吗,它工作错了,我不需要我的数据 td[0] td[1] td[2]
猜你喜欢
  • 2016-05-03
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 2018-07-30
  • 2019-10-05
  • 2012-01-31
  • 2015-03-08
相关资源
最近更新 更多