首页 文章

调用未定义的方法DOMNodeList :: getElementsByTagName()

提问于
浏览
0

我想使用PHP 's DOMDocument, so I use a foreach for every table: foreach($_POST[' comparison']解析一个html表作为$ value){},其中我嵌套了下面的代码 . 所以从比较表我想要每行($ value),该值包含一个html表( <table> ...</table> ) . 这是我要解析的表:

<table>
    <tbody>
        <tr>
            <td >.....</td>
            <td>....</td>
        </tr>
        <tr>
            <td>....</td>
            <td>.....</td>
        </tr>
    </tbody>
</table>

第二个代码是这样的,我为行创建一个foreach,然后为每一行创建一个索引($ i),在每一行内部另一个foreach,为列添加一个新索引($ j),所以目的是回显每个像这样的每一行的列(第一列 - 第一行,第二列 - 第一行,第一列 - 第二行,第二列 - 第二行......

foreach($_POST['comparison'] as $value) {


    echo  "<div id='primary' class='content-area'>";

               var_dump($value);  // check the type in the variable value 
      $dom = new DOMDocument;

    $dom->loadHTML($value);
    $dom->preserveWhiteSpace = false;

    $tables = $dom->getElementsByTagName('table');


     foreach ($tables->getElementsByTagName('tr') as $element1) {
            for ($i = 0; $i < $element1->length; $i++) {

             echo   $element1->item($i)->nodeValue . "\n";

               foreach ($element1->getElementsByTagName('td') as $element2) {

                  for ($j = 0; $j < $element2->length; $j++) {

               echo $element2->item($j)->nodeValue . "\n";  }

           /* $value_spec[] = $element2->nodeValue + "<br>";  */
        }
     }
  }

    echo " </div><!-- content-area -->";              

 }

}

我按照错误“调用未定义的方法DOMNodeList :: getElementsByTagName()”的说明,即添加item()以访问表的每个单元格,但错误仍然存在 . 如果有人可以帮忙,我将不胜感激 .

2 回答

  • 0

    试试这个,

    <?php
    
    $dom = new domDocument;
    $dom->loadHTML($value);
    $dom->preserveWhiteSpace = false;
    
    $tables = $dom->getElementsByTagName('table');
    $tr = $dom->getElementsByTagName('tr'); 
    
    foreach ($tr as $element1) {        
        for ($i = 0; $i < count($element1); $i++) {
            echo $element1->nodeValue . "\n";
            foreach ($element1->getElementsByTagName('td') as $element2) {
                for ($j = 0; $j < count($element2); $j++) {
                    echo $element2->nodeValue . "\n";  
                }
            }
        }
    }
    
  • 0
    $tables = $dom->getElementsByTagName ('table');
    
    // At this point, if you are sure that you want the first table found,  add
    $table = $tables->item(0);
    // Below working code, I don't undersatand what you do with that loops
         foreach ($table->getElementsByTagName ('tr') as $tr) {
              foreach ($tr->getElementsByTagName ('td') as $td) {
                     echo $td->nodeValue . "\n";  
             }
         }
    

    demo

相关问题