2017-07-06 15 views
0

ローカルHTMLファイルからコンテンツを抽出しようとしています。私はHTMLパースメソッドを使用しますが、何も取得しません。PHP HTML解析によるHTMLコンテンツの抽出nullオブジェクト

PHPコードは以下の通りです:

$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、とは$tablesためDOMNodeList::__set_state(array( ))を得ました。

assets.htmlの一部は以下の通りです:あなたは内部のデータを取得する必要があります$doc->loadHTMLFile("assets.html");代わり$doc->loadHTML("assets.html");

の:あなたは、ファイルから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

ここでは、ライドンスが正しいアイデアを持っていると思います。たぶんそれはその文字列をそのまま文字列として解析したのでしょうか? – tadman

答えて

1

使用ので、その後、$content

+0

をソリューションとして使用すると、HTML5に正しいコンテンツが表示されます。しかし、一部のHTMLファイルはHTML 4.0バージョンの下にあります。 loadHTMLFileの後に、 "Unexpected end tag"に関するエラー情報があります。しかし、手作業でチェックしたところ、すべてのタグが正しく閉じられていると思いました。 HTML解析がHTML4をサポートしているかどうか知っていますか? – Lisa

0

コードに間違いが見つかりました。

1:loadHTMLメソッドをload 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>