2017-07-06 65 views
0

我想从本地HTML文件中提取内容。而我使用HTML解析方法,但是什么都不要。PHP通过HTML解析HTML内容获取空对象

PHP代码如下:为$tables

$doc = new \DOMDocument(); 
$doc->loadHTML("assets.html"); 
$tables = $doc->getElementsByTagName('table'); 
foreach($tables as $table) { 
    $content = $doc->saveHTML($table); 
} 
echo $content; 

调试一步一步,$doc->loadHTML("assets.html")回报true,并得到了DOMNodeList::__set_state(array( ))

assets.html的部分如下:

        <div class="btn-group"> 
 
            <button type="button" class="btn btn-info dropdown-toggle" id="manage" data-toggle="dropdown"> 
 
              新增 
 
              <span class="caret"></span> 
 
             </button> 
 
             <ul class="dropdown-menu " role="menu"> 
 
              <li><a href="#" id="newassets">增加资产</a></li> 
 
              <li><a href="#" id="newdetail">增加明细</a></li> 
 

 
             </ul> 
 
            </div> 
 
            <button type="button" class="btn btn-danger" id="deleteassets" value="" >删除</button> 
 
            <button type="button" class="btn btn-success" id="modifyassets" value="" >修改</button> 
 
            <button type="button" class="btn btn-warning" id="lend-lease" value="" >领用</button> 
 
           </div> 
 

 
            <div class="dataTable_hr_info"> 
 
            <table class="table table-striped table-bordered table-hover" action="" id="assetsInfo"> 
 
             <thead> 
 
             <tr> 
 
              <th data-field="state" data-checkbox="true"></th> 
 
              <th data-field="pr" >序号</th> 
 
              <th data-field="category">资产类别</th> 
 
              <th data-field="name" >资产名称</th> 
 
              <th data-field="model">型号</th> 
 
              <th data-field="unit">单位</th> 
 
              <th data-field="count">数量</th> 
 

 
             </tr> 
 
             </thead> 
 
            </table> 
 
            </div> 
 
           </div> 
 
         </div>

+0

确定'$ doc'中有正确的文件,它加载是否正确?此代码是否会在日志中产生任何错误? – tadman

+0

我只是检查$ doc-> loadHTML(“assets.html”)返回true。我如何检查它是否正确加载?没有找到错误信息。 – Lisa

+0

我认为在这里raideance有正确的想法。也许它像字面上那样解析那个字符串就好像那个文档一样。 – tadman

回答

1

您从文件加载HTML这样使用:的$doc->loadHTMLFile("assets.html");代替$doc->loadHTML("assets.html");

你应该得到的内部数据之后,

+0

作为您的解决方案,我在HTML5中获得了正确的内容。但是一些HTML文件在HTML 4.0版本下。 loadHTMLFile之后,得到有关“意外结束标记”的错误信息。但我手动检查,我认为所有的标签正确关闭。你知道HTML解析器支持HTML4吗? – Lisa

0

在您的代码中发现一些错误。

1:您不能使用loadHTML方法加载html。

2:在您的HTML文件中,一些标签没有正确关闭。

检查下面的代码,

PHP

<?php 
    $dom = new DomDocument(); 
    $dom->loadHTML(file_get_contents('assets.html')); 
    $tables = $dom->documentElement->getElementsByTagName('table'); 
    foreach($tables as $table) { 
     $content = $dom->saveHTML($table); 
    } 
    echo $content; 
?> 

HTML

<div class="btn-group"> 
    <button type="button" class="btn btn-info dropdown-toggle" id="manage" data-toggle="dropdown"> 
      新增 
    <span class="caret"></span> 
    </button> 
    <ul class="dropdown-menu " role="menu"> 
     <li><a href="#" id="newassets">增加资产</a></li> 
     <li><a href="#" id="newdetail">增加明细</a></li> 
    </ul> 
</div> 
<button type="button" class="btn btn-danger" id="deleteassets" value="" >删除</button> 
<button type="button" class="btn btn-success" id="modifyassets" value="" >修改</button> 
<button type="button" class="btn btn-warning" id="lend-lease" value="" >领用</button> 
<div class="dataTable_hr_info"> 
    <table class="table table-striped table-bordered table-hover" action="" id="assetsInfo"> 
     <thead> 
      <tr> 
       <th data-field="state" data-checkbox="true"></th> 
       <th data-field="pr" >1</th> 
       <th data-field="category">2</th> 
       <th data-field="name" >3</th> 
       <th data-field="model">4</th> 
       <th data-field="unit">5</th> 
       <th data-field="count">6</th> 
      </tr> 
     </thead> 
    </table> 
</div>