Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php的简单HTML文件解析器_Php_Html_File_Parsing_Domdocument - Fatal编程技术网

使用php的简单HTML文件解析器

使用php的简单HTML文件解析器,php,html,file,parsing,domdocument,Php,Html,File,Parsing,Domdocument,我有一个我无法解决的特殊问题。我搜索了每一个教程或表格条目,但没有成功完成我需要做的事情。因此,我的HTML文件: <html> <head>**SOMETHING HERE**</head> <body> <div> <table> <thead> <tr><th>TEXT/NUM IS HERE</th><th>TEXT/NUM IS

我有一个我无法解决的特殊问题。我搜索了每一个教程或表格条目,但没有成功完成我需要做的事情。因此,我的HTML文件:

<html>
 <head>**SOMETHING HERE**</head>
 <body>
  <div>
   <table>
    <thead>
  <tr><th>TEXT/NUM IS HERE</th><th>TEXT/NUM IS HERE</th><th>TEXT/NUM IS HERE</th></tr>
    </thead><tbody>**SOMETHING HERE**</tbody></tfoot>**SOMETHING HERE**</tfoot>
   </table>
  </div>
 </body>
</html>
但是我仍然会犯很多错误,并且找不到一个方法来做到这一点。是否有任何方法可以简单地完成此任务,当然也可以用于父元素中的每个元素

谢谢。


<?php
$html = new file_get_html('file.html');
$th = $html->find('thead th');
$array = array();
foreach($th as $text) 
    $array[] = $th->innertext;
?>
这使用了可以找到的简单HTML Dom解析器


这使用了简单的HTML Dom解析器,可以找到该解析器使用:

$html=textContent;
}
打印(数据);
使用:

$html=textContent;
}
打印(数据);

如果您想让它保持与您现有的样式相同(从而了解您做错了什么),请尝试以下方法:

$file = "index.html";
$dom = new DOMDocument();
$dom->loadHTMLfile($file);

$oTHeadList = $dom->getElementsByTagName('thead');

foreach( $oTHeadList as $oThisTHead ){

    $oThList = $oThisTHead->getElementsByTagName('th');

    foreach( $oThList as $oThisTh ) {

        echo $oThisTh->nodeValue . "\n";
    }
}
基本上,“getElementsByTagName”返回一个节点列表而不是一个节点,因此您必须在它们上循环才能到达各个节点

此外,在HTML中,您有一个结束的
tfoot
,而不是开始的,如果您使用您提供的HTML文档进行测试,那么head标记中的
**此处的某物**
将导致抛出警告(以及任何其他无效HTML)

如果要在加载时抑制警告,可以添加一个“@”,但在代码中过多地添加该符号不是一个好主意

@$dom->loadHTMLfile($file);

如果你想让它保持与你所拥有的一样的风格(从而了解你做错了什么),试试以下方法:

$file = "index.html";
$dom = new DOMDocument();
$dom->loadHTMLfile($file);

$oTHeadList = $dom->getElementsByTagName('thead');

foreach( $oTHeadList as $oThisTHead ){

    $oThList = $oThisTHead->getElementsByTagName('th');

    foreach( $oThList as $oThisTh ) {

        echo $oThisTh->nodeValue . "\n";
    }
}
基本上,“getElementsByTagName”返回一个节点列表而不是一个节点,因此您必须在它们上循环才能到达各个节点

此外,在HTML中,您有一个结束的
tfoot
,而不是开始的,如果您使用您提供的HTML文档进行测试,那么head标记中的
**此处的某物**
将导致抛出警告(以及任何其他无效HTML)

如果要在加载时抑制警告,可以添加一个“@”,但在代码中过多地添加该符号不是一个好主意

@$dom->loadHTMLfile($file);
getElementsByTagName。元素。不是元素,而是元素。它返回手册中指定的值。您需要遍历这个.getElementsByTagName。元素。不是元素,而是元素。它返回手册中指定的值。您需要迭代这个过程。