Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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 在文档中获取标记_Php_Html_Domdocument - Fatal编程技术网

Php 在文档中获取标记

Php 在文档中获取标记,php,html,domdocument,Php,Html,Domdocument,我正在尝试获取页面中表格的HTML标记: $new_dom = new DOMDocument(); $table = ''; $nodesTable = $this->dom->getElementsbyTagName("table"); foreach($nodesTable as $nodeTable){ $color = $nodeTable->getAttribute('bordercolordark'); if ($color == '#73B

我正在尝试获取页面中表格的HTML标记:

$new_dom = new DOMDocument();

$table = '';

$nodesTable = $this->dom->getElementsbyTagName("table");

foreach($nodesTable as $nodeTable){
    $color = $nodeTable->getAttribute('bordercolordark');
    if ($color == '#73BAFF') {
        $table = $nodeTable;
    }
}

$new_dom->appendChild($table);

echo $new_dom->saveHTML();
以下是somepage.html:

<html>
<table>
    <tr> <td> 10 </td> </tr>
    <tr> <td> 10 </td> </tr>
    <tr> <td> 10 </td> </tr>
    <tr> <td> 10 </td> </tr>
</table>

<table border="1" cellpadding="0" width="500" bordercolorlight="#ACD6FF" bordercolordark="#73BAFF" align="center">
    <tr>
        <td rowspan="2" colspan="2" bgcolor="#73BAFF"> </td>
        <td colspan="3" align="center" bgcolor="#ACD6FF"> Element 1 </td>
        <td colspan="3" align="center" bgcolor="#ACD6FF"> Element 2 </td>
    </tr>
    <tr>
        <td width="50" align="center" bgcolor="#ACD6FF"> 50 </td>
        <td width="50" align="center" bgcolor="#ACD6FF"> 50 </td>
        <td width="50" align="center" bgcolor="#ACD6FF"> 50 </td>
        <td width="50" align="center" bgcolor="#ACD6FF"> 50 </td>
        <td width="50" align="center" bgcolor="#ACD6FF"> 50 </td>
        <td width="50" align="center" bgcolor="#ACD6FF"> 50 </td>
    </tr>
    <tr>
        <td bgcolor="#ACD6FF" width="155" align="center"> Row 1</td>
        <td bgcolor="#ACD6FF" width="45" align="center"> 30 </td>
        <td align="center"> 50 </td>
        <td align="center"> 50 </td>
        <td align="center"> 50 </td>
        <td align="center"> 50 </td>
        <td align="center"> 50 </td>
        <td align="center"> 50 </td>
    </tr>
    <tr>
        <td bgcolor="#ACD6FF" width="155" align="center"> Row 2</td>
        <td bgcolor="#ACD6FF" width="45" align="center"> 30 </td>
        <td align="center"> 60 </td>
        <td align="center"> 60 </td>
        <td align="center"> 60 </td>
        <td align="center"> 60 </td>
        <td align="center"> 60 </td>
        <td align="center"> 60 </td>
    </tr>
    <tr>
        <td bgcolor="#ACD6FF" width="155" align="center"> Row 3</td>
        <td bgcolor="#ACD6FF" width="45" align="center"> 30 </td>
        <td align="center"> 70 </td>
        <td align="center"> 70 </td>
        <td align="center"> 70 </td>
        <td align="center"> 70 </td>
        <td align="center"> 70 </td>
        <td align="center"> 70 </td>
    </tr>
</table>

<table>
    <tr> <td> 10 </td> </tr>
    <tr> <td> 10 </td> </tr>
    <tr> <td> 10 </td> </tr>
    <tr> <td> 10 </td> </tr>
</table>

<table>
    <tr> <td> 10 </td> </tr>
    <tr> <td> 10 </td> </tr>
    <tr> <td> 10 </td> </tr>
    <tr> <td> 10 </td> </tr>
</table>

</html>

10
10
10
10
要素1
要素2
50
50
50
50
50
50
一排
30
50
50
50
50
50
50
第2排
30
60
60
60
60
60
60
第3排
30
70
70
70
70
70
70
10
10
10
10
10
10
10
10
$new_dom只是输出\n而不是HTML标记。我试着看这个答案:,但以这种方式附加表格也不起作用

Fatal error: Uncaught exception 'DOMException' with message 'Wrong Document Error' 
因此,您无法将节点从一个文档移动到另一个文档。。。如果要这样做,必须使用
deep
标志

$dom = new DOMDocument();
$dom->loadHTMLFile('x.html');
$new_dom = new DOMDocument();

$table = '';

$nodesTable = $dom->getElementsbyTagName("table");

foreach($nodesTable as $nodeTable){
    $color = $nodeTable->getAttribute('bordercolordark');
    if ($color == '#73BAFF') {
        $table = $new_dom->importNode($nodeTable, true);
    }
}

$new_dom->appendChild($table);

echo $new_dom->saveHTML();
这只导入表元素,而不导入子元素

注意:在您的案例中,我将禁用实体加载器
libxml\u disable\u entity\u loader(true)。我不确定XEE攻击是否也适用于
loadHTML()
,但只是为了安全起见