2013-08-27 265 views
0

我試圖將元素追加到我在Domdocument中新創建的節點中。如何使用php將元素追加到另一個元素

我有類似

$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沒有table標籤,它是像

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

我想用table標籤來包裝它。

我的代碼不工作,它給了我錯誤,如

PHP Catchable fatal error: Argument 1 passed to DOMNode::appendChild() must be an instance of DOMNode, instance of DOMNodeList given,

我怎麼解決這個問題呢?謝謝!

+0

爲什麼你不使用jQuery /原生JavaScript? – Jonast92

+0

我不能,因爲它是一個電子郵件 – FlyingCat

+0

它被稱爲* getElement ** s ** ByTagName *不是一個。使用' - > item(0)'獲取該名稱的第一個元素。其餘的看起來很好。只要閱讀錯誤信息,它基本上是這樣說的(列表而不是元素)。 – hakre

回答

3

變量$tbody不是單個的<tbody>元素;這是一個集合的元素 - 你是「通過標籤名稱獲取元素」,並且可以有很多元素。如果您只想使用標記名稱查找元素,則絕對沒有理由使用XPath。

而是執行此操作:

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

See it in action

+0

+1;還有關於xpath的正確評論,在這種情況下是多餘的。 – hakre

+0

它按預期工作,但它似乎像我的表格單元格沒有邊框。我添加$ table-> setAttribute('style','border:2px solid#8C8C8C; text-align:center; table-layout:fixed; border-collapse:separate;')並且只有表格本身具有邊框但不包含表格單元格。我不知道發生了什麼+1 – FlyingCat

+0

@FlyingCat:邊框不會被子元素繼承。您可以使用CSS輕鬆地將邊框應用於所有單元格,但使用內聯樣式您需要將其分別應用於每個單元格。 – Jon

相關問題