1

Domdocument で新しく作成したノードに要素を追加しようとしています。

私は次のようなものを持っています

$dom = new DomDocument();
     $dom->loadHTML($html]);
     $xpath=new DOMXpath($dom);
      $result = $xpath->query('//tbody');

      if($result->length > 0){
          $tbody = $dom->getElementsByTagName('tbody');
          $table=$dom->createElement('table');
           $table->appendChild($tbody);
       }

私のtbodyにはテーブルタグがなく、次のようになります

<tbody>
    <tr>
       <td>cell</td>
       <td>cell</td>
       <td>cell</td>
    </tr> 
    ….more
</tbody>

tableタグをつけてラッピングしたいと思います。

コードが機能せず、次のようなエラーが発生しました

PHP Catchable 致命的エラー: DOMNode::appendChild() に渡される引数 1 は DOMNode のインスタンスである必要があります。与えられた DOMNodeList のインスタンスは、

この問題を解決するにはどうすればよいですか? ありがとう!

4

1 に答える 1

3

変数$tbodyは単一の<tbody>要素ではありません。これは要素のコレクションです。「タグ名で要素を取得」しており、多くの要素が存在する可能性があります。また、タグ名で要素を検索するだけであれば、XPath を使用する理由はまったくありません。

代わりにこれを行います:

$tbodies = $dom->getElementsByTagName('tbody');
foreach ($tbodies as $tbody) {
    $table = $dom->createElement('table');
    $tbody->parentNode->replaceChild($table, $tbody);
    $table->appendChild($tbody);
}

実際に見てください

于 2013-08-27T22:22:03.083 に答える